User
2 つのテーブルとがありますPost
。 1 つはUser
複数のテーブルを持つことができposts
、もう 1 つはpost
1 つのテーブルにのみ属しますuser
。
私のモデルには関係User
がありますhasMany
...
public function post(){
return $this->hasmany('post');
}
そして私のpost
モデルにはbelongsTo
関係があります...
public function user(){
return $this->belongsTo('user');
}
ここで、これら 2 つのテーブルを結合したいのですEloquent with()
が、2 番目のテーブルの特定の列が必要です。クエリ ビルダーを使用できることはわかっていますが、使用したくありません。
モデルでPost
書くときは...
public function getAllPosts() {
return Post::with('user')->get();
}
次のクエリを実行します...
select * from `posts`
select * from `users` where `users`.`id` in (<1>, <2>)
でも私が欲しいのは...
select * from `posts`
select id,username from `users` where `users`.`id` in (<1>, <2>)
使用すると...
Post::with('user')->get(array('columns'....));
最初のテーブルの列のみが返されます。2with()
番目のテーブルの特定の列を使用したいと考えています。どうすればいいでしょうか?
ベストアンサー1
解決策を見つけました。配列の2番目のインデックスとしてclosure
関数を渡すことで実現できます。with()
Post::query()
->with(['user' => function ($query) {
$query->select('id', 'username');
}])
->get()
id
他のテーブルからのみ選択しますusername
。これが他の人の役に立つことを願っています。
実際に必要な結果を取得するには、主キー (この場合は id) が の最初のパラメータである必要があることに注意してください。*$query->select()