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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel Eloquent,仅选择存在关系的行相关的知识,希望对你有一定的参考价值。

我试图从表中选择,但我只想选择具有现有关系的东西。

例如,如果我有用户和评论,并且用户有很多评论,我想做类似的事情:

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

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

答案

根据Laravel's Eloquent documentation查询关系(寻找“查询关系存在”子标题),这应该工作:

User::has('comments')->paginate(20);
另一答案

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

$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;
}

以上是关于Laravel Eloquent,仅选择存在关系的行的主要内容,如果未能解决你的问题,请参考以下文章

Laravel eloquent 检查不存在的多对多关系

Laravel Eloquent 在与其他表连接后从关系中选择字段

Laravel/Eloquent ORM - 仅检索引用的记录

Laravel - 使用 Eloquent 从连接关系模型中选择特定列

Laravel Eloquent 从关系中选择

Laravel:Eloquent Eager Loading 关系的选择