Wie sage ich WHERE (a = 1 OR b =1 ) AND (c = 1 OR d = 1)
Muss ich für kompliziertere Abfragen rohes SQL verwenden?
Wie sage ich WHERE (a = 1 OR b =1 ) AND (c = 1 OR d = 1)
Muss ich für kompliziertere Abfragen rohes SQL verwenden?
Beste Möglichkeit, SQL-Klammern zu verwenden, ist die Verwendung von Rückruffunktionen in Laravel Eloquent.
YourModal::where(function ($q) {
$q->where('a', 1)->orWhere('b', 1);
})->where(function ($q) {
$q->where('c', 1)->orWhere('d', 1);
});
Sie müssen das
=
-Symbol nicht verwenden, es wird standardmäßig verwendet
Sagen wir, Sie haben eine Abfrage, die Klammern in Klammern enthält
WHERE (a = 1 OR (b = 1 und c = 5))
YourModal::where(function ($q) {
$q->where('a', 1)->orWhere(function($q2){
$q2->where('b', 1)->where('c', 5);
});
});
Sagen wir, Sie möchten Werte dynamisch generieren
YourModal::where(function ($q) use($val1, $val2) {
$q->where('a', $val1)->orWhere(function($q2) use($val2){
$q2->where('b', $val2)->where('c', $val2);
});
});
ModelName::where(function ($query) use ($a) {
$query->where('a', '=', $a)->orWhereNull('a');
})
->where(function ($query) use ($b,$c) {
$query->where('b', '=', $b)
->orWhere('c', '=', $c);
})->where('d',$d);
OUTPUT QUERY:
SELECT * FROM ModelName WHERE (a='a' or a is null) AND (b='b' or c='c') AND d='d';
Für den eloquent-Abfragegenerator funktioniert die folgende Abfrage nicht:
MODELNAME::where('a', 1)->orWhere('b', 1)->where('c', 1)->orWhere('d', 1);
Aber Sie können diesen Code verwenden:
MODELNAME::where(function($a) {
$a->where('a', 1)->orWhere('b', 1);
})->where(function($a) {
$a->where('c', 1)->orWhere('d', 1);
});
Sie können die zweite Abfrage verwenden und sie wird perfekt funktionieren.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.