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?
Verwenden Sie Logische Gruppierung (Laravel 7.x/4.2). Für Ihr Beispiel würde es so aussehen:
Model::where(function ($query) {
$query->where('a', '=', 1)
->orWhere('b', '=', 1);
})->where(function ($query) {
$query->where('c', '=', 1)
->orWhere('d', '=', 1);
});
Wenn Sie die ODER-Bedingungen durchlaufen, benötigen Sie nicht das zweite $query->where aus den anderen Beiträgen (eigentlich glaube ich, dass Sie es im Allgemeinen nicht benötigen, Sie können einfach orWhere in dem verschachtelten Where verwenden, wenn es einfacher ist)
$attributes = ['first'=>'a','second'=>'b'];
$query->where(function ($query) use ($attributes)
{
foreach ($attributes as $key=>value)
{
//du kannst orWhere das erste Mal benutzen, muss nicht ->where sein
$query->orWhere($key,$value);
}
});
Wenn Sie Klammern in Laravel 4 verwenden möchten und nicht vergessen zurückzugeben
In Laravel 4 (zumindest) müssen Sie $a und $b in Klammern verwenden, wie im Beispiel gezeigt.
$a = 1;
$b = 1;
$c = 1;
$d = 1;
Model::where(function ($query) use ($a, $b) {
return $query->where('a', '=', $a)
->orWhere('b', '=', $b);
})->where(function ($query) use ($c, $d) {
return $query->where('c', '=', $c)
->orWhere('d', '=', $d);
});
Einfach in Laravel Eloquent verwenden:
$a='foo', $b='bar', $c='john', $d='doe';
Coder::where(function ($query) use ($a, $b) {
$query->where('a', '=', $a)
->orWhere('b', '=', $b);
})->where(function ($query) use ($c, $d) {
$query->where('c', '=', $c)
->orWhere('d', '=', $d);
})->get();
Wird eine Abfrage wie folgt erzeugen:
SELECT * FROM WHERE (a='foo' or b='bar') AND (c='john' or d='doe');
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.