我有两个表,user
和post
。一个用户
可以有多个帖子
并且一个帖子
只属于一个用户
。
在我的user
模型中,我有一个hasmany
关系...
public function post(){
return $this->hasmany('post');
}
在我的post
模型中,我有一个belongsto
关系...
public function user(){
return $this->belongsTo('user');
}
现在,我想使用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()
的特定列。我怎么能那样做?
我找到了解决办法。可以通过在中使用()
传递闭包
函数作为数组的第二个索引来实现
Post::query()
->with(array('user' => function($query) {
$query->select('id','username');
}))
->get();
它将只从其他表中选择ID
和username
。我希望这能帮助到别人。
请记住,主键(在本例中为id)需要是$query->select()
中的第一个param,以实际检索必要的结果。*