„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich mit Laravels Query Builder effizient aus Unterabfragen auswählen?

Wie kann ich mit Laravels Query Builder effizient aus Unterabfragen auswählen?

Gepostet am 2025-03-23
Durchsuche:906

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

laravel query constructor erledigt die subrows

]

Bei der Verwendung von eloquentem ORM zum Abrufen von Daten aus Unterabfragen verwenden Entwickler häufig tosql () und native Abfragen in Kombination. Obwohl diese Methode effektiv ist, ist sie nicht intuitiv genug. Hier ist eine effizientere Lösung:

zum Beispiel, um die Ergebnisanzahl aus der folgenden Unterabfrage zu extrahieren:

SELECT COUNT(*) 
FROM (
  SELECT * 
  FROM abc 
  GROUP BY col1
) AS a;

Laravel erlaubt uns, native Abfragen in beredte Abfragen zu verschmelzen mergeBindings . Zunächst erstellen wir eine eloquente Builder -Instanz für die Unterabfrage:

$sub = Abc::where(..)->groupBy(..);

Dann verwenden wir db :: table , um eine neue Tabelle zu erstellen, die die Unterabfrage verweist und die entsprechende Bindung manuell festlegt:

$count = DB::table( DB::raw("({$sub->toSql()}) as sub") )
    ->mergeBindings($sub->getQuery()) // 获取底层查询构造器
    ->count();

Dieser Ansatz stellt sicher, dass die korrekte Bindung auf die fusionierte Abfrage angewendet wird, was zu dem gewünschten Ergebnis führt, ohne die Stringoperationen manuell auszuführen.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3