Closed1

laravel9¦collectionのgroupByで複数の条件を掛け合わせて使う方法

fuwakanifuwakani

やりたいこと

collectionのgroupByを複数使う方法です。
Laravelのwithで複数のリレーション先の情報を取得し、複数のリレーション先を掛け合わせたgroupByをしたい。

環境

  • PHP: 8.1
  • Laravel: 9

結論

User::with(['team', 'task', 'task.histories'])
    ->get()
    ->groupBy(function ($item, $key) {
        return $item->team->name . ' ' . $item->task->histories->first()->name;
    });

リレーションが1対多でリレーション先のテーブルが多の時は注意が必要

1つのテーブルver

User::get()
    ->groupBy(function ($item, $key) {
        return $item->company_id . ' ' . $item->team_id;
    });
このスクラップは2023/02/09にクローズされました