目次
laravel 5.2 でシステムを作っていたところ、 LEFT JOIN
を使った問い合わせ(SQL実行)をしたら、 id
カラムが取れなくなりました。 そのときの対処法を紹介します。
問題
問題が出たのは次のようなコードです。
1 2 3 4 5 |
$items = Item:: with(['a', 'b'])-> leftJoin('a', 'a.item_id', '=', 'items.id')-> leftJoin('b', 'b.item_id', '=', 'items.id')-> orderBy('items.id', 'desc')->take(4)->get(); |
LEFT JOIN
で2つテーブルを結合しています。 しかし、取得されたデータ(モデルオブジェクト)は id = null
となります。
対処法
最後の get
のところを少し変えます。
1 2 3 4 5 |
$items = Item:: with(['a', 'b'])-> leftJoin('a', 'a.item_id', '=', 'items.id')-> leftJoin('b', 'b.item_id', '=', 'items.id')-> orderBy('items.id', 'desc')->take(4)->get(['items.*']); |
もしくは、次のようにして全カラムを記述することでも解決できます。
1 2 3 4 5 6 7 8 9 |
$items = Item:: with(['a', 'b'])-> leftJoin('a', 'a.item_id', '=', 'items.id')-> leftJoin('b', 'b.item_id', '=', 'items.id')-> orderBy('items.id', 'desc')->take(4)->get([ 'items.id', 'items.column_1', 'items.column_2', ]); |
paginate する場合
Laravel の paginate
を使う場合は paginate
の第2引数にカラムを記述します。
1 2 3 4 5 6 |
$items = Item:: with(['a', 'b'])-> leftJoin('a', 'a.item_id', '=', 'items.id')-> leftJoin('b', 'b.item_id', '=', 'items.id')-> orderBy('items.id', 'desc')-> paginate(10, ['items.*']); |