Laravel通过雄辩的关系进行分组

yud*_*ohn 10 relation laravel

我如何按关系分组?

Sales::with('product_detail.product')->groupBy('product_name')->get()
Run Code Online (Sandbox Code Playgroud)

如何用雄辩的代码获得结果?

小智 12

我认为最重要的答案没有回答问题。据我了解,目的是对外部查询的结果进行分组,而不是对关系进行分组。

这在 Eloquent-y DB 调用中是不可能的,因为对 With 的调用是单独的。您可以手动连接表并按所需列进行分组。

如果你想保持 Eloquent-y,有很多方便的方法可以用于 Collections,包括 GroupBy。所以可以先获取数据,然后再分组。

  • 嘿,Sahil,您有机会提供一行可能对所问问题有用的代码或示例吗? (2认同)

Imt*_*bel 10

您可以指定一个回调函数来对您的关系进行分组,如下所示:

Sales::with(['product_detail.product' => function($query){
        $query->groupBy('product_name');
    }])->get();
Run Code Online (Sandbox Code Playgroud)

  • 由于关系是通过单独的查询而不是联接拉入的,因此这并不能满足OP的要求。 (4认同)

小智 6

这可能已经很旧了,但是,它可以帮助探索者。

您可以在 Laravel 中使用 groupBy 直接链接到关系/远程关系。我不知道这是否特定于任何版本,但 V8 可以工作。并且关系也像您使用的那样被加载with

 Sales::query()->where('this', $that)->get()->groupBy('product.name'); // OR

 Sales::query()->where('this', $that)->get()->groupBy('product.status.name');
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,这是一种与问题中完全不同的“groupBy”方法。它正在处理集合,而不是数据库查询。 (6认同)