2014-11-05 2 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

Спасибо, это сработало красиво. –

6

С Laravel 5.2.27, вы можете использовать conditional clauses

Например:

->when($gender, function($query) use ($gender) { 
     $query->where('gender', '=', $gender); 
     }) 
->get(); 
Смежные вопросы