問題: 使用 Eloquent ORM 從 SQL 子查詢擷取計數聚合的值。
最初方法:
<code class="language-php">$sql = Abc::from('abc AS a') ->groupBy('col1') ->toSql(); $num = Abc::from(\DB::raw($sql)) ->count();</code>
這種方法需要手動產生子查詢 SQL,這不是理想的做法。
最佳解:
Laravel 查詢建構器目前缺乏在 FROM 子句中建立子查詢的專用方法。 必須手動使用原始語句,並進行正確的綁定管理:
<code class="language-php">// 定义子查询 $sub = Abc::where(...)->groupBy(...); // Eloquent Builder 实例 // 创建主查询 $count = DB::table(DB::raw("({$sub->toSql()}) AS sub")) ->mergeBindings($sub->getQuery()) // 正确合并绑定 ->count();</code>
注意: 必須以正確的順序合併綁定。如果在合併後新增了其他條件,則必須調整順序以確保正確的綁定。
以上是如何使用 Laravel 的查詢產生器有效率地從子查詢中進行選擇?的詳細內容。更多資訊請關注PHP中文網其他相關文章!