Laravel-Fähigkeiten: Erklärung der Overlay-Chain-Aufrufmethode des Query Builder

jacklove
Freigeben: 2023-04-02 18:40:01
Original
1885 Leute haben es durchsucht

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(); 
 }
Nach dem Login kopieren

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();
Nach dem Login kopieren

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);
Nach dem Login kopieren

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
Nach dem Login kopieren

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:

  1. So erstellen Sie eine Abfrage mit mehreren Where-Klauseln mithilfe von Laravel Eloquent? - stackoverflow

  2. Model::query - laravelAPI

Artikel, die Sie interessieren könnten:

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!