我有两个表, User
和 Post
. 一个 User
可以有多个 posts
,一个 post
只属于一个 user
.
在我的 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()
特定列 . 我怎样才能做到这一点?
8 回答
现在,您可以在
Collection
实例上使用pluck
方法:这将只返回
Post model
的uuid
属性请注意,如果您只需要表中的一列,那么使用'lists'非常好 . 在我的情况下,我正在检索用户最喜欢的文章,但我只想要文章ID:
返回一个id数组,例如:
好吧,我找到了解决方案 . 它可以通过在
with()
中传递closure
函数作为数组的第二个索引来完成它只会从其他表中选择
id
和username
. 我希望这会有助于其他人 .在你的
Post
模型中最初的功劳归于Laravel Eager Loading - Load only specific columns
走另一条路(hasMany):
不要忘记包含外键(假设在此示例中为user_id)来解析关系,否则您的关系将得到零结果 .
你可以在Laravel 5.5中这样做:
关注docs中所述的
id
字段:在Laravel 5.6中,您可以像这样调用特定字段
在您的
Post
模型中:现在你可以使用
$post->userWithName