人気のPHP WEBアプリケーションフレームワークLaravelのTipsを記録していきます

Laravel の モデルで リレーション先のカラムで親データをソートする

● Laravel の モデルで リレーション先のカラムで親データをソートする

少しややこしい表現になりますが、
リレーション先の複数のカラムをソートする のではなく、
リレーション先のカラムを使って親データをソート します

\App\Shirt::with('size')
    ->select('shirts.*', \DB::raw('(SELECT sort FROM sizes WHERE shirts.size_id = sizes.id limit 1 ) as sort'))
    ->orderBy('sort', 'ASC')
    ->get();  // または paginate( $limit );

注意

limit 1 をつけないと、複数行ある時に 「Subquery returns more than 1 row」エラーが返ります

● Laravelのサブクエリ用メソッド

Laravel 5.6.19 から は DB::raw を使用する代わりに joinSub()、leftJoinSub()、rightJoinSub()が追加されたようです。

DB::table('table')->joinSub('select * from "subtable"', 'sub', ...);
DB::table('table')->leftJoinSub(function ($q) { $q->from('subtable'); }, 'sub', ...);
DB::table('table')->rightJoinSub(DB::table('subtable')->where('foo', 'bar'), 'sub', ...);

引用元 : https://goo.gl/2UPi1E

関連エントリー

No.1436
10/11 17:28

edit

Eloquent
DB