$modelQuery->get()の戻り値はCollection
Eloquentを使用して取得した戻り値はCollectionクラスなので、
用意されているgroupBy()
メソッドを使用すればOK
Collection::groupBy
本家サイトはコチラ
これを使うと指定したキーでコレクションのアイテムをグループにまとめることができる
使ってみる
- productsテーブル
id | category | name |
1 | 食品 | おにぎり |
2 | 飲料 | ハイボール |
3 | 食品 | ラーメン |
4 | 飲料 | ビール |
$products = Product::query()->get();
dd($products->groupBy('category')->toArray());
デバッグするとちゃんとグループ分けがされてる
[
'食品' => [
['id' => 1, 'category' => '食品', 'name' => 'おにぎり'],
['id' => 3, 'category' => '食品', 'name' => 'ラーメン'],
],
'飲料' => [
['id' => 2, 'category' => '飲料', 'name' => 'ハイボール'],
['id' => 4, 'category' => '飲料', 'name' => 'ビール'],
],
]
Laravelで、DBから取得したデータを
特定のkeyを指定してグループ分けしたい時