Laravel查詢構造器高效處理子查詢
使用Eloquent ORM從子查詢擷取資料時,開發者常會組合使用toSql()
和原生查詢。雖然這種方法有效,但不夠直覺。這裡提供一個更有效率的解決方案:
例如,要從下列子查詢中提取結果計數:
<code class="language-sql">SELECT COUNT(*) FROM ( SELECT * FROM abc GROUP BY col1 ) AS a;</code>
Laravel允許我們使用mergeBindings
將原生查詢合併到Eloquent查詢中。首先,我們為子查詢建立一個Eloquent Builder實例:
<code class="language-php">$sub = Abc::where(..)->groupBy(..);</code>
然後,我們使用DB::table
建立一個引用子查詢的新表,並手動設定對應的綁定:
<code class="language-php">$count = DB::table( DB::raw("({$sub->toSql()}) as sub") ) ->mergeBindings($sub->getQuery()) // 获取底层查询构造器 ->count();</code>
這種方法確保將正確的綁定應用於合併後的查詢,從而獲得我們想要的結果,而無需手動進行字串操作。
以上是如何使用 Laravel 的查詢產生器有效率地從子查詢中進行選擇?的詳細內容。更多資訊請關注PHP中文網其他相關文章!