Laravel クエリビルダーでのサブクエリの選択
Eloquent ORM のクエリ ビルダーを使用してサブクエリからデータを選択するのは難しい場合があります。この記事では、GROUP BY を使用して作成されたサブクエリのレコード数を取得したいユーザーが直面する特定の問題に対処します。
質問を詳しく見てみましょう:
ユーザーは当初、次のコードを使用してこの問題を解決しようとしました:
<code class="language-php">$sql = Abc::from('abc AS a') ->groupBy('col1') ->toSql(); $num = Abc::from(DB::raw($sql)) ->count(); print $num;</code>
このアプローチは論理的であるように見えますが、最も効率的な解決策ではありません。
エレガントで最適化されたソリューション:
提案される解決策には、生の SQL とバインド マージを組み合わせて使用することが含まれます。
<code class="language-php">$sub = Abc::where(..) ->groupBy(..); // Eloquent Builder 实例 $count = DB::table(DB::raw("({$sub->toSql()}) as sub")) ->mergeBindings($sub->getQuery()) // 以正确的顺序合并绑定 ->count();</code>
このソリューションでは、Eloquent Builder インスタンスを使用してサブクエリが構築され、生の SQL 式に組み込まれます。 mergeBindings()
メソッドは、サブクエリのバインディングとメインクエリのバインディングを結合するために使用されます。こうすることで、サブクエリから必要なデータを効率的に取得できます。
以上がGROUP BYを使用してLaravelサブクエリからレコードを効率的にカウントする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。