我正在尝试检索表格中的所有行,但是使用用户过滤器(条件)。
表格如下:
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并重新编写查询!
答案 0 :(得分:2)
这样:
$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();
答案 1 :(得分:1)
您可以将关闭传递给where()
试试这个:
$filters = ['is_avtive', 'type', 'category'];
News::where(function($q) use ($filters){
foreach($filters as $field)
$q->where($field, Input::get($field));
})->get();
答案 2 :(得分:0)
试试这个
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();