397 Stimmen

Laravel Eloquent-Abfrage: Verwenden von WHERE mit OR UND OR?

Wie sage ich WHERE (a = 1 OR b =1 ) AND (c = 1 OR d = 1)

Muss ich für kompliziertere Abfragen rohes SQL verwenden?

667voto

rmobis Punkte 24243

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);
});

128voto

Yilmazerhakan Punkte 1755

Wenn du Parameter für a, b, c, d in Laravel 4 verwenden möchtest

Model::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);
});

34voto

Sabrina Leggett Punkte 8481

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);
    }
});

33voto

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);
});

Das ist mein Ergebnis: Bildbeschreibung hier eingeben

15voto

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.com

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.

Powered by:

X