Ich verwende den Laravel Eloquent-Abfrage-Generator und habe eine Abfrage, in der ich eine WHERE
Klausel für mehrere Bedingungen möchte . Es funktioniert, aber es ist nicht elegant.
Beispiel:
$results = User::where('this', '=', 1)
->where('that', '=', 1)
->where('this_too', '=', 1)
->where('that_too', '=', 1)
->where('this_as_well', '=', 1)
->where('that_as_well', '=', 1)
->where('this_one_too', '=', 1)
->where('that_one_too', '=', 1)
->where('this_one_as_well', '=', 1)
->where('that_one_as_well', '=', 1)
->get();
Gibt es einen besseren Weg, dies zu tun, oder sollte ich mich an diese Methode halten?
->where(...)
Anrufe durch einen->whereIn(...)
Anruf usw. ersetzt werden können .Antworten:
In Laravel 5.3 (und ab 7.x immer noch gültig) können Sie detailliertere Wherees verwenden, die als Array übergeben werden:
Persönlich habe ich keinen Anwendungsfall für nur mehrere
where
Anrufe gefunden, aber Tatsache ist, dass Sie ihn verwenden können.Seit Juni 2014 können Sie ein Array an übergeben
where
Solange Sie alle
wheres
Verwendungsoperatoren möchtenand
, können Sie sie folgendermaßen gruppieren:Dann:
Das Obige führt zu einer solchen Abfrage:
quelle
=
.WHERE (a IS NOT NULL AND b=1) OR (a IS NULL AND b=2);
?$users = DB::table('users')->where([ ['status', '=', '1'], ['subscribed', '<>', '1'], ])->get();
whereNotIn
entsprechend deiner Antwort zu anderenwhere
Cluases hinzu?Abfragebereiche können Ihnen dabei helfen, Ihren Code besser lesbar zu machen.
http://laravel.com/docs/eloquent#query-scopes
Aktualisieren Sie diese Antwort mit einem Beispiel:
Erstellen Sie in Ihrem Modell folgende Bereichsmethoden:
Anschließend können Sie diese Bereiche beim Erstellen Ihrer Abfrage aufrufen:
quelle
Sie können Unterabfragen in anonymen Funktionen wie folgt verwenden:
quelle
In diesem Fall könnten Sie Folgendes verwenden:
Es sollte Ihnen eine Abfrage liefern wie:
quelle
Bedingungen mit Array:
Erzeugt eine Abfrage wie unten:
Bedingungen mit anonymer Funktion:
Erzeugt eine Abfrage wie unten:
quelle
Mehrere where-Klauseln
endlich das Ergebnis bekommen
quelle
Der
whereColumn
Methode kann ein Array mit mehreren Bedingungen übergeben werden. Diese Bedingungen werden mit demand
Operator verbunden.Beispiel:
Weitere Informationen finden Sie in diesem Abschnitt der Dokumentation unter https://laravel.com/docs/5.4/queries#where-clauses
quelle
ODER
ODER
quelle
Stellen Sie sicher, dass Sie andere Filter auf Unterabfragen anwenden, da sonst alle Datensätze erfasst werden.
quelle
quelle
Ohne ein reales Beispiel ist es schwierig, eine Empfehlung abzugeben. Ich musste jedoch nie so viele WHERE-Klauseln in einer Abfrage verwenden, was möglicherweise auf ein Problem mit der Struktur Ihrer Daten hinweist.
Es kann hilfreich sein, sich mit der Datennormalisierung vertraut zu machen: http://en.wikipedia.org/wiki/Third_normal_form
quelle
Sie können eloquent in Laravel 5.3 verwenden
Alle Ergebnisse
Teilergebnisse
quelle
Verwenden Sie
whereIn
Bedingung und übergeben Sie das Array$array = [1008,1009,1010];
User::whereIn('users.id', $array)->get();
quelle
Sie können das Array in der where-Klausel verwenden, wie unten gezeigt.
quelle
quelle
Gemäß meinem Vorschlag, wenn Sie filtern oder suchen
dann solltest du gehen mit:
quelle
Benutze das
quelle
Implementieren Sie es mit reinem Eloquent wie folgt. Dieser Code gibt alle angemeldeten Benutzer zurück, deren Konten aktiv sind.
$users = \App\User::where('status', 'active')->where('logged_in', true)->get();
quelle
Ein Beispiel für Code.
Zuerst :
Das Array wird hier mit der gewünschten Anzahl / Schleife von Bedingungen schrittweise gefüllt :
und hier:
und weiter mit Beredsamkeiten wie:
quelle
quelle
quelle