我有两张桌子,User和Post。一个User可以有很多posts,一个post只属于一个user。
User
Post
posts
post
user
在我的User模型中,我有一个hasMany关系......
hasMany
public function post(){ return $this->hasmany('post'); }
在我的post模型中,我有一个belongsTo关系......
belongsTo
public function user(){ return $this->belongsTo('user'); }
现在我想使用Eloquent with()第二个表中的特定列来连接这两个表。我知道我可以使用查询生成器,但我不想。
Eloquent with()
当我在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'....));
它只返回第一个表中的列。我想要使用with()第二个表中的特定列。我怎样才能做到这一点?
with()
好吧,我找到了解决方案。可以通过将closure函数with()作为数组的第二个索引传递来完成,例如
closure
Post::query() ->with(['user' => function ($query) { $query->select('id', 'username'); }]) ->get()
它只会从其他表中选择id和。username我希望这对其他人有帮助。
id
username
请记住, 主键(在本例中为 id)需要是$query->select()实际检索必要结果的第一个参数。*
$query->select()