Heim >Datenbank >MySQL-Tutorial >Wie kann ich mit dem Query Builder von Laravel effizient aus Unterabfragen auswählen?
Laravel Query Builder verarbeitet Unterabfragen effizient
Bei der Verwendung von Eloquent ORM zum Abrufen von Daten aus Unterabfragen verwenden Entwickler häufig eine Kombination aus toSql()
und nativen Abfragen. Dieser Ansatz funktioniert zwar, ist aber nicht intuitiv genug. Eine effizientere Lösung finden Sie hier:
Zum Beispiel, um die Ergebnisanzahl aus der folgenden Unterabfrage zu extrahieren:
<code class="language-sql">SELECT COUNT(*) FROM ( SELECT * FROM abc GROUP BY col1 ) AS a;</code>
Laravel ermöglicht es uns, mithilfe von mergeBindings
native Abfragen in eloquente Abfragen zusammenzuführen. Zuerst erstellen wir eine Eloquent Builder-Instanz für die Unterabfrage:
<code class="language-php">$sub = Abc::where(..)->groupBy(..);</code>
Wir verwenden dann DB::table
, um eine neue Tabelle zu erstellen, die auf die Unterabfrage verweist, und legen die entsprechenden Bindungen manuell fest:
<code class="language-php">$count = DB::table( DB::raw("({$sub->toSql()}) as sub") ) ->mergeBindings($sub->getQuery()) // 获取底层查询构造器 ->count();</code>
Dieser Ansatz stellt sicher, dass die richtigen Bindungen auf die zusammengeführte Abfrage angewendet werden, um die gewünschten Ergebnisse zu erhalten, ohne dass eine manuelle Zeichenfolgenbearbeitung erforderlich ist.
Das obige ist der detaillierte Inhalt vonWie kann ich 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!