2014-11-05 21 views
2

如果我有一個變量是可選的,並且我只想在它上面搜索它,如果它已被定義,我知道我可以這樣做,但有沒有辦法在其他地方定義函數,所以我不需要一遍又一遍地重寫同一個匿名函數?還是解決這個問題的其他好的選擇?雄辯的條件在哪裏過濾器

.......->where(function($query) use ($gender){ 
      if ($gender) { 
       $query->where('gender', '=', $gender); 
      } 
      })->get(); 

回答

5

你可以使用一個dynamic scope

class User extends Eloquent { 

    public function scopeGender($query, $gender) 
    { 
     if ($gender) { 
      return $query->whereGender($gender); 
     } 
     return $query; 
    } 
} 

然後在整個應用程序

...->gender($gender)->get(); 
+0

謝謝,它工作得很好。 – 2014-11-05 05:38:00

6

由於Laravel 5.2.27,你可以使用conditional clauses

例如:

->when($gender, function($query) use ($gender) { 
     $query->where('gender', '=', $gender); 
     }) 
->get();