基于用户搜索/过滤的具有多个条件的laravel后续查询


laravel elequent query with multiple conditions based on user search/filter

我正在尝试检索表中的所有行,但使用了用户筛选器(where conditions)。

表如下所示: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,然后重新编写查询!

这种方式:

$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();