提问者:小点点

使用Laravel口才中的“with()”函数获取特定列


我有两个表,userpost。一个用户可以有多个帖子并且一个帖子只属于一个用户

在我的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()的特定列。我怎么能那样做?


共1个答案

匿名用户

我找到了解决办法。可以通过在中使用()传递闭包函数作为数组的第二个索引来实现

Post::query()
    ->with(array('user' => function($query) {
        $query->select('id','username');
    }))
    ->get();

它将只从其他表中选择IDusername。我希望这能帮助到别人。

请记住,主键(在本例中为id)需要是$query->select()中的第一个param,以实际检索必要的结果。*