2017-03-21 21 views
0

私は、ユーザモデルによって表される著者に属する出版モデルを持っています。これは、それらが定義されている方法です。EloquentはbelongsTo関係を取得しません

class Publication extends \Illuminate\Database\Eloquent\Model { 
    public $incrementing = false; 

    public function author() { 
    return $this->belongsTo('App\Models\User'); 
    } 
} 

私は私のテーブルの標準命名規則を使用し、その出版物の表に、私はuser_idをnammed列を持っています。

class User extends \Illuminate\Database\Eloquent\Model { 
    const ROLES = ["Enseignant-Chercheur", "Doctorant"]; 

    public $incrementing = false; 

    public function publications() { 
    return $this->hasMany('App\Models\Publication'); 
    } 
} 

私は私のデータをretriveしよう

:関係の配列が空である

$publications = \App\Models\Publication::orderBy('created_at', 'desc')->take(10)->get(); 
die('<pre>'.var_export($publications[0], true).'</pre>'); 

...データベースでは、行が正しく右のユーザIDで満たされています。
これを修正するにはどうすればよいですか?

+0

達成しようとしていることは何ですか?ユーザーの出版物を入手できますか? – Onix

答えて

2

@ Wizixあなたの外部キーがlaravelメカニズムと一致しない場合、明示的に外部キーを定義して関係データを検索するには、以下のように試すことができます。

public function publications() { 
    return $this->hasMany('App\Models\Publication','user_id'); 
    //user_id consider as foriegn key in publication model's table 
} 

以下のように定義する出版モデルで

//ユーザーモデルで

public function author() { 
    return $this->belongsTo('App\Models\User','user_id'); 
} 

//以下のような関係を定義し、次にあなたに雄弁使用して、キーワード「と」使用して関係データにアクセスしてみてくださいすることができます以下。

\App\Models\Publication::with('author')->orderBy('created_at', 'desc')->take(10)->get(); 
+0

私の外来キーを明示的に定義しなければならなかった理由はわかりませんが、動作しています – Wizix

+0

@Wizix laravelモデル名に基づいて外部キーを '_id'を付加してマップしようとすると、明示的に定義する必要があります。詳細はhttps://laravel.com/docs/5.4/eloquent-relationships#one-to-manyを参照してください。 –

3

関係は、明示的にアクセスした場合にのみ読み込ますなわちさ:$publications[0]->author

それともたい場合は、eager load著者ができ、()の関数で、必要なクエリを減らす:

\App\Models\Publication::with('author')->orderBy('created_at', 'desc')->take(10)->get(); 
関連する問題