Laravel Eloquentでリレーション先のカラムでOrderByをする

Laravel Eloquentでリレーション先のカラムでOrderByをする

単純に一つのモデル(テーブル)で並べ替えるだけならorderByを指定すれば良いですが、リレーション先の別モデルのカラムで並び替える場合は、Eloquentのリレーションでは出来ないため、以下のようにJOINする必要があります。

サンプルテーブル

employees

id name
1 一郎
2 次郎
3 三郎

salaries

employee_id price
1 1000
2 2000
3 3000

給与の高い順にemployeeを取得する

$employees = Employee::select(employees.*)
    ->join('salaries', 'employees.id', '=', 'salaries.employee_id')
    ->orderBy('salaries.price', 'desc')
    ->get();

プログラミングカテゴリの最新記事