2017-12-06 10 views
1

私は検索をしようとしており、1,4の状態のユーザーのみを返すことを望みます。私がこれを使用しようとすると、それらはすべてそれらをつかんで、私の最後のものを無視します。Laravelの別の場所フィルタを持っている

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

私も試してみました

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

答えて

0

をテストされていません
1

問題は、あなたがどこの連鎖とorWhereはLaravelで作品を連鎖する方法を理解する必要があります。

$query->where(..a..)->orWhere(..b..)->where(..c..)->orWhere(..d..)と言うときは、それは(a || (b && c) || d)と評価されます。 ((a || b) && (c || d))を意図しているか、((a && c) || b || d)を意図している可能性があります。あなたは、高度な句を必要とするとき、あなたがこのようなものが必要parameter grouping

1

、使用理由はここにある:

$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(); 

注:私はちょうど

$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(); 
をそれを考え出しこれは
関連する問題