首頁 >資料庫 >mysql教程 >如何使用 Laravel 的查詢產生器有效率地從子查詢中進行選擇?

如何使用 Laravel 的查詢產生器有效率地從子查詢中進行選擇?

Linda Hamilton
Linda Hamilton原創
2025-01-12 07:08:43306瀏覽

How to Efficiently Select from Subqueries Using Laravel's Query Builder?

使用 Laravel 查詢建構器從子查詢中選擇資料

問題: 使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn