Laravel:行分组

Laravel: Grouping of rows

我有一个名为 Order 的模型,如下所示:

class Order extends Model
{
     public function offer()
     {
     return $this->belongsTo(Offer::class);
     }  
}

示例行可能如下所示

id  quantity    offer_id
15  5           20
20  1           21
25  3           20
30  2           27
35  1           20
40  1           21

我想使用 Laravel Eloquent 按 offer_id 对所有订单进行分组以提供以下输出:

[
    [20] => [
        // order 15,
        // order 25,
        // order 35,
    ],
    [21] => [
        // order 20,
        // order 40,
    ]
    [27] => [
        // order 30,
    ]
]

我怎样才能有效地做到这一点?我尝试了以下方法:

Order::groupBy('offer_id)->get();

但这只是隐藏了具有相同 offer_id 的订单。

请注意,理想情况下,我希望在 Laravel Elqouent 中完成所有这些工作,而不是进行一些 post 处理。

laravel 收集方法 groupBy 正是这样做的。

The groupBy method groups the collection's items by a given key:

$orders = Order::get()->groupBy('offer_id');

这是因为查询生成器 returns 一个集合,您可以将集合助手链接到这个对象上以获得所需的结果。

Laravel site

上找到的文档