だから私は次のクエリを持っています:
$a = Model::where('code', '=', $code)
->where('col_a', '=' , 1)
->orderBy(DB::raw('FIELD(layout, "normal", "split", "flip", "double-faced", "") ASC, layout'))
$b = Model::where('code', '=', $code)
->where('col_b', '=' , 1)
->orderBy(DB::raw('FIELD(layout, "normal", "split", "flip", "double-faced", "") ASC, layout'))
$a->union($b)->get();
最初に 'orderBy()'を実行し、次にunionを実行しても、並べ替えは行われません。
「$ a」または「$ b」を個別に照会すると、「orderBy()」は正常に機能します。
次の方法でそれを行うと、「orderBy()」が全体として発生します。
$a->union($b)
->orderBy(DB::raw('FIELD(layout, "normal", "split", "flip", "double-faced", "") ASC, layout'))
->get();
「orderBy()」がそれぞれ個別に適用され、結果を結合するようにするにはどうすればよいですか?うまくいくようです。
編集:だれでもこれを行う方法を提供できる場合、たとえそれが通常のMySQLであっても、Eloquentにバグがあるかもしれないと思うので、答えとしてあなたのものを選択します。
"merge"Laravelコレクションが役立つ場合があります。
大きな違いは、事前に-> get()を使用してクエリを終了し、union()ではなくmerge()を使用することです。
$a = Model::where('code', '=', $code)
->where('col_a', '=' , 1)
->orderBy(DB::raw('FIELD(layout, "normal", "split", "flip", "double-faced", "") ASC, layout'))->get();
$b = Model::where('code', '=', $code)
->where('col_b', '=' , 1)
->orderBy(DB::raw('FIELD(layout, "normal", "split", "flip", "double-faced", "") ASC, layout'))->get();
$result = $a->merge($b);
注:私はあなたのデータを持っていないので、それが動作することを証明することはできませんが、それは私のデータで少なくとも動作しますので、あなたの試してみる価値があります
orderBy()
の後にunion()
を適用してみてください
これを試して
$a->union($b)->orderBy(DB::raw('FIELD(layout, "normal", "split", "flip", "double-faced", "") ASC, layout'))->get();
[〜#〜] edit [〜#〜]
これを試してみて、雄弁なクエリについて調査し、見つけて準備しました
$modelA = Model::where('code', '=', $code)
->where('col_a', '=' , 1)
->orderBy(DB::raw('FIELD(layout, "normal", "split", "flip", "double-faced", "") ASC, layout'))
$modelB = Model::where('code', '=', $code)
->where('col_b', '=' , 1)
->orderBy(DB::raw('FIELD(layout, "normal", "split", "flip", "double-faced", "") ASC, layout'))
$a = DB::table(DB::raw("({$modelA->toSql()}) as a"))
->mergeBindings($modelA->getQuery())
->selectRaw("a.*");
$b = DB::table(DB::raw("({$modelB->toSql()}) as b"))
->mergeBindings($modelB->getQuery())
->selectRaw("b.*");
$a->union($b)->get();
以下を試してください:
$a = Model::where('code', '=', $code)
->where('col_a', '=' , 1);
$b = Model::where('code', '=', $code)->where('col_b', '=' , 1)
->union($a)
->get();
$result = $b;