Laravel查詢構造器高效處理子查詢
在使用Eloquent ORM從子查詢中檢索數據時,開發者經常會組合使用toSql()
和原生查詢。雖然這種方法有效,但不夠直觀。這裡提供一個更高效的解決方案:
例如,要從以下子查詢中提取結果計數:
SELECT COUNT(*)
FROM (
SELECT *
FROM abc
GROUP BY col1
) AS a;
Laravel允許我們使用mergeBindings
將原生查詢合併到Eloquent查詢中。首先,我們為子查詢創建一個Eloquent Builder實例:
$sub = Abc::where(..)->groupBy(..);
然後,我們使用DB::table
創建一個引用子查詢的新表,並手動設置相應的綁定:
$count = DB::table( DB::raw("({$sub->toSql()}) as sub") )
->mergeBindings($sub->getQuery()) // 获取底层查询构造器
->count();
這種方法確保將正確的綁定應用於合併後的查詢,從而獲得我們想要的結果,而無需手動進行字符串操作。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3