2017-10-11 6 views
0
、私はそれは私が他のものへのモデルから持っているフィールドのデータを変更することが可能である知っている必要があり

でそれと関係データを列を置き換えますか? ?例えばlaravelモデル

私はその中created_byカラムとデータを持っていることは、私はUserモデルとすべてのものとの関係を作成する必要があり1

は結構ですが、私はそれの名前をユーザー

いずれかとcreated_byを交換する必要がありますされお願いしますか? ?

この

は私が $appendがCREATED_BY値を置き換えると思う belongeTo起動したときにそれがnullとしてそれを読み込みますエラーがこの

enter image description here

ある

class PostsTranslation extends Model { 


    public $appends = [ 'created_by' ]; 


    public function User() { 

     return $this->belongsTo('App\User', 'created_by', 'id')->first(); 

    } 


    public function getCreatedByAttribute() { 
     return $this->User()->name; 

    } 


} 

を試してみましたが、何である

これには、または何らかの方法でcreated_byのidを0にするための解決策がありますか?? ?

+0

:あなたは他の方法でこれを実行したい場合は

$translation = PostsTranslation::with('user')->find(1); $translation->created_by->name; 

、その後のようなゲッター/セッターパターンを適用関係は? – manniL

+0

には、このための理由はありませんし、APIのためにも、私は関係でそれにアクセスする方法を見つけることができませんでしたが、私は前に似たような状況の多くを得た(と私はそれを行うことができなかった)場合、それは次のようになります'パブリック関数getCreatedByAttribute(){ 戻ります$ this-> USER-'と、私のチームのために、より理解しやすいと他の人がこれを試してみてください – programmer

+0

ため、よりクリーン '> belongsToの( 'アプリケーション\ユーザー'、 'ID')しますreturn $ this- >名前; } ' – Maraboc

答えて

0
getCreatedByAttribute 

しないでください。このアプローチでは、実行されたSQLクエリの量が狂っているだけでなく、人々がコードを理解する方法を壊しています。あなたがを介してユーザの名前にアクセスしたくない特別な理由があるの

class PostsTranslation extends Model { 
    public function User() { 
      return $this->belongsTo('App\User', 'created_by', 'id')->first(); 
    } 
    public function getCreatedBy() { 
     return $this->User->name; 
    } 
} 
+0

が、それは動作しませんでした1秒間、あなたに私の友人に感謝し、変化がない、エラー:私はCREATED_BY + updated_by + deleted_byあなたがそれらに行くために私を必要とHHHHを持っているので、CREATED_BYにはならないだろうユーザーが見つかりませんでした。私はUser()に質問のエラーを再度返しました。なぜ、それがうまくいかないのですか?またはそれ以上のクエリが実行されますか?それは私の方法であなたの方法でクエリで同じになります:) – programmer

+0

私はそれが動作する必要があると思う、あなたは確かに与えられたIDを持つユーザーは本当に存在する? –

+0

はい私はそれが存在すると確信しています。もし私が他のものにgetCreatedByを変更したのであれば、私の例ではうまくいきますが、私の場合は私はそれを置き換える必要があります – programmer