Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zum Query Builder-Overlay-Chain-Aufruf in Laravel ein. Der Artikel stellt ihn im Detail anhand des Beispielcodes vor, der einen gewissen Referenz-Lernwert für alle hat, die lernen oder arbeiten Wenn Sie es benötigen, können Sie unten vorbeischauen.
Einführung in den Abfrage-Builder
Der Laravel-Abfrage-Builder (Abfrage-Builder) bietet eine praktische und flüssige Schnittstelle zum Einrichten und Ausführen von Datenbanksyntax
verwendet die PDO-Parameterbindung, um die Anwendung vor SQL-Injection zu schützen. Daher müssen die eingehenden Parameter nicht mit Sonderzeichen
maskiert werden, was grundsätzlich alle Datenbankoperationen erfüllen und auf allen unterstützten Datenbanksystemen ausgeführt werden kann
Einführung
Heute möchte ich Ihnen einen kleinen Trick des Laravel-Abfragekonstruktors vorstellen. Er wird in den offiziellen Dokumentbeispielen nicht ausführlich erwähnt und ist keine High-End-Fähigkeit Leute, die es vielleicht benutzen, nein. Studenten, die es kennen, können einen Blick darauf werfen.
Im Geschäftscode werden Abfragen häufig auf der Grundlage verschiedener Bedingungen durchgeführt. Als einfaches Beispiel möchten wir nun die Benutzerliste abfragen, die in umgekehrter chronologischer Reihenfolge angeordnet ist, und Status und Typ können als qualifizierende Bedingungen verwendet werden.
Ich habe es zuerst so geschrieben
if($status && $type) { $users = User::where('status', $status)->where('type', $type)->latest()->get(); } else if ($status) { $users = User::where('status', $status)->latest()->get(); } else if ($type) { $users = User::where('status', $type)->latest()->get(); } else { $users = User::latest()->get(); }
Dieser Code ist wirklich hässlich, viel öffentlicher Code, wie zum Beispiel ->neueste () ->get(), viermal geschrieben. Wenn das Produkt sagt, dass wir es heute in der richtigen Reihenfolge sortieren möchten, müssen Sie vier Stellen ändern. Obwohl es mit Hilfe eines Editors schnell geändert werden kann, müssen Sie wissen, dass dies nur das einfachste Beispiel ist.
Nach dem Lesen des Dokuments gibt es eine Methode zur bedingten Beurteilung. Eine Reihe von Abschlüssen sind nicht ideal. Ich war fest davon überzeugt, dass es eine elegantere Schreibweise geben muss, also suchte ich nach Stackoverflow, und tatsächlich gab mir der allmächtige Waiguoren die Antwort.
Verbessertes Schreiben:
$query = User::query(); // 如果用DB: $query = DB::table('user'); if ($status) { $query->where('status', $status); } if ($type) { $query->where('type', $type); } $users = $query->latest()->get();
Verwenden Sie Variablen, um die Instanz des Abfragekonstruktors zu speichern, überlagern Sie sie dann mit Einschränkungen und erhalten Sie schließlich die Sammlung. Der öffentliche Teil steht am Anfang und am Ende und die Struktur ist klar. Handelt es sich um eine Entscheidung?
Und wir können $query auch als Parameter an eine Methode oder Funktion übergeben und so gemeinsame Logik zusammenfassen, um mehrere Aufrufe zu ermöglichen:
function foo($query) { $query->with(['girl', 'gay']) ->latest() ->get(); } $query = User::query(); $users = foo($query);
Bei dieser Schreibweise gibt es einen Vorbehalt: Sobald Sie eine Einschränkungsmethode wie „where“ für „$query“ aufrufen, muss die Abfrage im Voraus geändert werden.
Zum Beispiel wollen wir Benutzer vom Typ 1 und 2 gleichzeitig bekommen
$query_1 = User::query(); $query_2 = clone $query_1; $users_1 = $query_1->where('type', 1)->latest()->get(); $users_2 = $query_2->where('type', 2)->latest()->get(); // 错误 $users_2 = $query_1->where('type', 1)->latest()->get(); // 这样写得到得是type = 1 and $type = 2
Obwohl es so etwas nicht gibt Ding in Laravels Dokumentation Beispiel, aber erwähnt:
Sie können die Tabellenmethode der DB-Fassade verwenden, um die Abfrage zu starten. Diese Tabellenmethode gibt eine Abfrage-Builder-Instanz für die Abfragetabelle zurück, sodass Sie beim Abfragen weitere Einschränkungen verketten und die get-Methode verwenden können, um das Endergebnis zu erhalten
Off-Topic
Vorheriges Ich hörte einige Senioren sagen, dass sie keine Programmierer wollen, die nur Baidu kennen. Damals fühlte ich mich wirklich anmaßend, nicht alle Suchmaschinen, weil ich damals noch nicht Google benutzte. Jetzt möchte ich nicht mit jemandem zusammenarbeiten, der nur weiß, dass Baidu nur eine Werbesuche ist und alle Suchergebnisse Unsinn sind.
Google und Stackoverflow sind wirklich gute Dinge und bieten professionelle Antworten. Von der Computergeschichte bis hin zu Betriebssystemen, Datenbanken und verschiedenen Programmiersprachen haben sie mir beim Debuggen vieler Fehler geholfen. Ist es schlecht, in segmentfault so zu werben?
Zusammenfassung
Referenz:
So erstellen Sie eine Abfrage mit mehreren Where-Klauseln mithilfe von Laravel Eloquent? - stackoverflow
Model::query - laravelAPI
Freigabe der PHP-Implementierung des Fibonacci-Sequenzcodes
Erklärung der PHP-Implementierung der Array-Suchfunktion basierend auf der Halbierungsmethode
Detaillierte Erklärung von Klassen und Objekten in PHP
Das obige ist der detaillierte Inhalt vonLaravel-Fähigkeiten: Erklärung der Overlay-Chain-Aufrufmethode des Query Builder. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!