Heim >Datenbank >MySQL-Tutorial >Wie kann man mit dem Query Builder von Laravel effizient aus Unterabfragen auswählen?
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!