Unterabfrageauswahl im Laravel Query Builder
Das Auswählen von Daten aus einer Unterabfrage mit dem Abfrage-Builder des Eloquent ORM kann eine Herausforderung sein. In diesem Artikel geht es um ein spezielles Problem, mit dem ein Benutzer konfrontiert war, der die Datensatzanzahl für eine mit GROUP BY erstellte Unterabfrage abrufen wollte.
Tauchen Sie ein in die Fragen:
Benutzer haben zunächst versucht, dieses Problem mit dem folgenden Code zu beheben:
<code class="language-php">$sql = Abc::from('abc AS a') ->groupBy('col1') ->toSql(); $num = Abc::from(DB::raw($sql)) ->count(); print $num;</code>
Obwohl dieser Ansatz logisch erscheint, ist er nicht die effizienteste Lösung.
Elegante und optimierte Lösung:
Die vorgeschlagene Lösung beinhaltet die Verwendung einer Kombination aus Roh-SQL und Bindungszusammenführung:
<code class="language-php">$sub = Abc::where(..) ->groupBy(..); // Eloquent Builder 实例 $count = DB::table(DB::raw("({$sub->toSql()}) as sub")) ->mergeBindings($sub->getQuery()) // 以正确的顺序合并绑定 ->count();</code>
In dieser Lösung wird die Unterabfrage mithilfe einer Eloquent Builder-Instanz erstellt und dann in einen unformatierten SQL-Ausdruck eingebunden. Die mergeBindings()
-Methode wird verwendet, um die Bindungen einer Unterabfrage mit den Bindungen der Hauptabfrage zu kombinieren. Auf diese Weise können Sie die erforderlichen Daten effizient aus der Unterabfrage abrufen.
Das obige ist der detaillierte Inhalt vonWie kann man Datensätze aus einer Laravel-Unterabfrage mit GROUP BY effizient zählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!