Laravel5.5を使用しています。
LaravelのEloquentを用いて、取得したコレクションをマージした際、想定した動作になりません。
以下、サンプルコードです。
php
1$hoge = new Hoge(); // Eloquentモデル 2 3$result1 = $hoge->select('hoge.*')->join('huga','hoge.id', '=', 'huga.hoge_id')->get(); 4/** 5検索結果は3件で以下のような形 6object(Illuminate\Database\Eloquent\Collection)[80] 7 protected 'items' => 8 array (size=3) 9 0 => object(App\Models\Hoge), // id:1 10 1 => object(App\Models\Hoge), // id:2 11 2 => object(App\Models\Hoge) // id:3 12*/ 13 14 15$result2 = $hoge->select('hoge.*')->join('piyo','hoge.id', '=', 'piyo.hoge_id')->get(); 16/** 17検索結果は2件で以下のような形 18object(Illuminate\Database\Eloquent\Collection)[80] 19 protected 'items' => 20 array (size=2) 21 0 => object(App\Models\Hoge), // id:4 22 1 => object(App\Models\Hoge) // id:5 23*/ 24 25 26$result1->merge($result2); 27/** 28求める形は以下 29object(Illuminate\Database\Eloquent\Collection)[80] 30 protected 'items' => 31 array (size=5) 32 0 => object(App\Models\Hoge), // id:1 33 1 => object(App\Models\Hoge), // id:2 34 2 => object(App\Models\Hoge) // id:3 35 3 => object(App\Models\Hoge), // id:4 36 4 => object(App\Models\Hoge) // id:5 37*/ 38
しかし実際に出力された値は
php
1 2$result1->merge($result2); 3/** 4求める形は以下 5object(Illuminate\Database\Eloquent\Collection)[80] 6 protected 'items' => 7 array (size=1) 8 4 => object(App\Models\Hoge) // id:5 9*/ 10
以下のようにコードを変更すると求める値が取得できました。
php
1collect($result1->all())->merge($result2);
しかしマージのために新たに(しかも一方だけ)コレクションクラスでラップするのも見栄えが悪く無駄な処理をしている気がします。
何か
$result1->xxx($result2);
のように簡潔な形で求めるコレクションを取得する方法はないでしょうか。
よろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/24 11:41