Heim >Datenbank >MySQL-Tutorial >Wie kann man mit dem Query Builder von Laravel effizient aus Unterabfragen auswählen?

Wie kann man mit dem Query Builder von Laravel effizient aus Unterabfragen auswählen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-12 07:08:43275Durchsuche

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

Wählen Sie Daten aus Unterabfragen mit dem Laravel-Abfrage-Builder aus

Frage: Abrufen des Werts eines Zählaggregats aus einer SQL-Unterabfrage mithilfe von Eloquent ORM.

Anfängliche Methode:

<code class="language-php">$sql = Abc::from('abc AS a')
    ->groupBy('col1')
    ->toSql();

$num = Abc::from(\DB::raw($sql))
    ->count();</code>

Dieser Ansatz erfordert die manuelle Generierung von Unterabfrage-SQL, was nicht ideal ist.

Beste Lösung:

Dem Laravel-Abfrage-Builder fehlt derzeit eine dedizierte Methode zum Erstellen von Unterabfragen in der FROM-Klausel. Rohanweisungen müssen manuell mit ordnungsgemäßer Bindungsverwaltung verwendet werden:

<code class="language-php">// 定义子查询
$sub = Abc::where(...)->groupBy(...); // Eloquent Builder 实例

// 创建主查询
$count = DB::table(DB::raw("({$sub->toSql()}) AS sub"))
    ->mergeBindings($sub->getQuery()) // 正确合并绑定
    ->count();</code>

Hinweis: Bindungen müssen in der richtigen Reihenfolge zusammengeführt werden. Sollten nach der Zusammenführung weitere Bedingungen hinzukommen, muss die Bestellung angepasst werden, um eine korrekte Bindung sicherzustellen.

Das obige ist der detaillierte Inhalt vonWie kann man mit dem Query Builder von Laravel effizient aus Unterabfragen auswählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn