2017-12-06 5 views
1

Ich versuche, eine Suche durchzuführen und möchte nur die Benutzer mit dem Status 1,4 zurückgeben. Obwohl, wenn ich versuche, dies zu benutzen, greift es alle und ignoriert meine letzte wo.Mit einem anderen Where-Filter auf Laravel

$officiants = Officiant::where('status',1) 
         ->where('email', 'like', '%'.$item.'%') 
         ->orWhere('lname', 'like', '%'.$item.'%') 
         ->orWhere('lname', 'like', '%'.$item.'%') 
         ->whereIn('status', [1,4]) 
         ->get(); 

Ich habe auch versucht,

$officiants = Officiant::where('status',1) 
         ->where('email', 'like', '%'.$item.'%') 
         ->orWhere('lname', 'like', '%'.$item.'%') 
         ->orWhere('lname', 'like', '%'.$item.'%') 
         ->where('status', 1) 
         ->where('status', 4) 
         ->get(); 

Antwort

0

ich es nur aus

dachte
$officiants = Officiant::where('status', 1) 
            ->orWhere('status', 4) 
            ->where(function ($query) use ($item) { 
             $query->where('email', 'like', '%'.$item.'%') 
              ->where('lname', 'like', '%'.$item.'%') 
              ->where('lname', 'like', '%'.$item.'%'); 
            })->get(); 
1

Das Problem ist, müssen Sie verstehen, wie, wo und Verkettungs orWhere Werke in Laravel verketten.

Wenn Sie $query->where(..a..)->orWhere(..b..)->where(..c..)->orWhere(..d..) sagen, wird ausgewertet: (a || (b && c) || d). Wo haben Sie vielleicht gedacht ((a || b) && (c || d)) oder Sie haben möglicherweise beabsichtigt, ((a && c) || b || d). Aus diesem Grund, wenn Sie erweiterte where-Klauseln müssen, verwenden parameter grouping

1

Sie so etwas wie dieses benötigen:

$officiants = Officiant::where('status',1) 
    ->where(function($query) use($item){ 
     $query->where('email', 'like', '%'.$item.'%') 
      ->orWhere('lname', 'like', '%'.$item.'%') 
      ->orWhere('lname', 'like', '%'.$item.'%') 
    }) 
     ->whereIn('status', [1,4]) 
     ->get(); 

Hinweis: Dies ist nicht

getestet
Verwandte Themen