Laravel Eloquent,仅选择存在关系的行

2022-08-31 00:43:07

我正在尝试从表中进行选择,但我只想选择具有现有关系的内容。

例如,如果我有用户和评论,而用户有很多评论,我想做这样的事情:

User::hasComments()->paginate(20);

因此,我只想选择至少有1条评论的用户,并对该查询的结果进行分页。有什么办法可以做到这一点吗?


答案 1

根据Laravel的 Eloquent 文档来查询关系是否存在,您可以使用以下方法:has()

User::has('comments')->paginate(20);

答案 2

把你的想法颠倒过来,我认为你可以做到。

$userIds = Comment::distinct()->select('user_id')->groupBy('user_id')->get();

你可能不需要,但这应该让你开始有一种方法来做到这一点。groupBy()

然后,您应该能够像这样循环访问每个:

foreach($userIds as $id) {
    $user = $id->user;  //$id is technically a Comment instance so you can
                        //  call the methods on that model
    echo $user->name;
}

推荐