如何返回groupBy的所有行

时间:2019-07-31 09:59:25

标签: laravel eloquent

我使用查询获取用户拥有的模型,但是每个用户仅返回1个模型。如何获得全部?如果我设置$count=3,我应该在组中收到3个或更多模型,但仅返回第一行

$items->where(/*.....*/)
            ->groupBy('user_id')
            ->havingRaw("COUNT(*) >= {$count}")->get()

更新 我解决了我创建了一个单独的函数来准备查询,并使用了2次。 我认为这可能是一个不正确的解决方案,但是它有效

$items = Items::query();
$this->prepareQuery($request, $items)

$items->whereHas('user', function ($q) use ($count, $request){

                $q->whereHas('items', function ($query) use ($request){
                    $this->prepareQuery($request, $query);
                }, '>=', $count);
            })
 ->paginate(4);

2 个答案:

答案 0 :(得分:0)

如果您已建立关系,则可以简单地致电:

$model->models()

$model是您想要列表的模型。 models()是两个项目之间关系的名称。

例如,一个帖子可能有很多评论。您可以致电$post->comments()获取帖子评论列表。

您也可以用一些雄辩的魔术直接从数据库中查询它。

Post::with('comments')->where(/*....*/)->get();

编辑:

您可以检查模型是否具有X个相关模型,像这样。

Post::has('comments', '>=', 3)->where(/*...*/)->get();

答案 1 :(得分:0)

这可能有用。有时需要帮助。

$items->where(/*.....*/)
            ->groupBy('user_id')
            ->take({{$count}});