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?

9voto

ashok Punkte 91

Sie können auch die erste oder Bedingung abfragen und später eine andere oder Bedingung anwenden

$model = Model::where('a',1)->orWhere('b',1);

wenden Sie jetzt eine weitere Bedingung auf die $model Variable an

$model1 = $model->where('c',1)->orWhere('d',1)->get();

8voto

Majbah Habib Punkte 4216

$a, $b, $c, $d können dynamische Werte durch die Abfrage sein

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

8voto

Ein anderer Weg, ohne Modal zu verwenden

Datenbank: Aktien Spalten: id, name, company_name, exchange_name, status Bildbeschreibung hier eingeben

  $name ='aa'
  $stocks = DB::table('stocks')
            ->select('name', 'company_name', 'exchange_name')
            ->where(function($query) use ($name) {
                $query->where('name', 'like', '%' . $name . '%')
                ->orWhere('company_name', 'like', '%' . $name . '%');
            })
            ->Where('status', '=', 1)
            ->limit(20)
            ->get();

5voto

Leon Punkte 1713

Sie können auch Abfragebereiche verwenden, um die Dinge etwas ordentlicher zu gestalten, so dass Sie beispielsweise Folgendes tun können:

Invoice::where('account', 27)->notPaidAt($date)->get();

Dann in Ihrem Modell

public function scopeNotPaidAt($query, $asAt)
{
    $query = $query->where(function ($query) use ($asAt) { 
        $query->where('paid', '=', '0000-00-00')->orWhere('paid', '>=', $asAt); 
    });
    return $query;    
}

5voto

parastoo Punkte 1989
YourModel::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);
});

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