【Laravel】DBのデータを特定のkeyで配列分けする (GroupBy)

えび

Laravelで、DBから取得したデータを
特定のkeyを指定してグループ分けしたい時

$modelQuery->get()の戻り値はCollection

Eloquentを使用して取得した戻り値はCollectionクラスなので、
用意されているgroupBy()メソッドを使用すればOK

Collection::groupBy

本家サイトはコチラ

これを使うと指定したキーでコレクションのアイテムをグループにまとめることができる

使ってみる

  • productsテーブル
idcategoryname
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' => 'ビール'],
  ],
]