基于用户搜索/过滤的多个条件的laravel eloquent查询

时间:2014-09-07 16:46:00

标签: php laravel laravel-4

我正在尝试检索表格中的所有行,但是使用用户过滤器(条件)。

表格如下: news: id, category, type, body, is_active

我希望用户按以下方式对其进行过滤:typeis_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并重新编写查询!

3 个答案:

答案 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();

查看advanced where