Heim >Datenbank >MySQL-Tutorial >Wie wähle ich mit dem Query Builder von Laravel elegant aus einer Unterabfrage aus?

Wie wähle ich mit dem Query Builder von Laravel elegant aus einer Unterabfrage aus?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-12 10:34:43930Durchsuche

How to Elegantly Select from a Subquery using Laravel's Query Builder?

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

In einem aktuellen Projekt haben Sie Eloquent ORM verwendet, um Daten aus einer Datenbank abzurufen. Eine der Anforderungen besteht darin, eine Unterabfrage zu verwenden, um die Anzahl der Datensätze in einer bestimmten Spalte zu zählen. Hier ist die SQL-Abfrage, die Sie ausführen möchten:

<code class="language-sql">SELECT COUNT(*) FROM 
(SELECT * FROM abc GROUP BY col1) AS a;</code>

Ihr erster Versuch, die Methoden from() und groupBy() des Abc-Modells zu verwenden:

<code class="language-php">$sql = Abc::from('abc AS a')->groupBy('col1')->toSql();
$num = Abc::from(\DB::raw($sql))->count();
print $num;</code>

Sie suchen jedoch nach einer eleganteren Lösung.

Komplettlösung

Der Laravel-Abfrage-Builder bietet keine direkte Möglichkeit, Unterabfragen in der FROM-Klausel zu erstellen. Daher müssen Sie die Roh-SQL-Anweisung manuell erstellen. Dazu können Sie die folgenden Methoden verwenden:

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

$count = DB::table( DB::raw("({$sub->toSql()}) as sub") )
    ->mergeBindings($sub->getQuery()) // 合并所有绑定
    ->count();</code>

Um genaue Ergebnisse zu gewährleisten, achten Sie darauf, die Bindungen in der richtigen Reihenfolge zusammenzuführen. Wenn Sie andere verbindliche Klauseln haben, sollten Sie diese nach mergeBindings() einfügen:

<code class="language-php">$count = DB::table( DB::raw("({$sub->toSql()}) as sub") )

    // ->where(...) 错误的位置

    ->mergeBindings($sub->getQuery()) // 合并绑定

    // ->where(...) 正确的位置

    ->count();</code>

Diese Lösung bietet eine einfache und effiziente Möglichkeit, Unterabfragen mit komplexen Bedingungen und Bindungen auszuführen.

Das obige ist der detaillierte Inhalt vonWie wähle ich mit dem Query Builder von Laravel elegant aus einer Unterabfrage aus?. 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