我正在尝试检索表中的所有行,但使用了用户筛选器(where conditions)。
表如下所示:news: id, category, type, body, is_active
我希望用户通过:type
和is_active
来过滤它们
所以我使用
if(Input::get("is_active"))
News::where("is_active", 1)->get();
if(Input::get("type"))
News::where("type", Input::get("type"))->get();
if(Input::get("category"))
News::where("category", Input::get("category"))->get();
如何在同一查询上运行所有条件?我不想为每个条件设置if/else,然后重新编写查询!
这种方式:
$query = News::newQuery();
if(Input::get("is_active"))
$query->where("is_active", 1)->get();
if(Input::get("type"))
$query->where("type", Input::get("type"))->get();
if(Input::get("category"))
$query->where("category", Input::get("category"))->get();
return $query->get();
试试这个
News::where("is_active", 1)
->where('type', Input::get("type"))
->where('category', Input::get("category"))
->get();
或者,如果您只想要具有其他或条件的活动新闻。
News::where("is_active", 1)
->orWhere(function($query)
{
$query->where('type', Input::get("type"))
->where('category', Input::get("category"))
})->get();
查看高级
您可以将闭包传递给where()
试试这个:
$filters = ['is_avtive', 'type', 'category'];
News::where(function($q) use ($filters){
foreach($filters as $field)
$q->where($field, Input::get($field));
})->get();