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?

5voto

Engr. Umar Ejaz Punkte 66

Sie können verwenden:

Model::where('table_column', 'value')->orWhere('table_column', 'value')->get()

2voto

Supun Praneeth Punkte 2718

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

2voto

Debendra Punkte 61
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';

1voto

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.

1voto

Dankyi Anno Kwaku Punkte 1151

Dies funktioniert für mich

$business = Model::where('model_id', $model_id1)->orWhere('model_id', $model_id2)->first();

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