【问题标题】:How return all rows for groupBy如何返回 groupBy 的所有行
【发布时间】:2019-07-31 18:52:12
【问题描述】:

我使用查询来获取用户拥有的模型,但每个用户只返回 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);

【问题讨论】:

  • groupBy 就是这样做的。如果您有 10 个具有相同 user_id 的项目,它只会返回一个。
  • 如何解决这个问题?
  • 使用->get();代替groupBy

标签: laravel eloquent


【解决方案1】:

这可能会奏效。有时服用会有所帮助。

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

【讨论】:

    【解决方案2】:

    如果你已经建立了关系,你可以很简单地调用:

    $model->models()

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

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

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

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

    编辑:

    您可以检查一个模型是否有 X 个这样的相关模型。

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

    【讨论】:

    • 它不适合我的情况。我需要为用户获取所有模型,如果它们可以从他们那里获得一定数量的话。
    • 我找到了解决方案并写了。或许你看了就明白我需要什么了。
    猜你喜欢
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 2021-11-08
    • 2012-03-23
    • 2022-07-08
    相关资源
    最近更新 更多