小编典典

在 Laravel Eloquent 中使用“ith()”函数获取特定列

all

我有两张桌子,UserPost。一个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()第二个表中的特定列。我怎样才能做到这一点?


阅读 93

收藏
2022-04-27

共1个答案

小编典典

好吧,我找到了解决方案。可以通过将closure函数with()作为数组的第二个索引传递来完成,例如

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

它只会从其他表中选择id和。username我希望这对其他人有帮助。


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

2022-04-27