在Laravel查询中搜索键不为null时执行where条件

时间:2016-04-26 07:14:49

标签: mysql laravel laravel-5.1 where

我想仅在搜索键不为空时才在select查询的where条件上运行。如果搜索键为空,则跳过where where condition。这是我的代码,

$users =  User::orderBy('id','asc')
            ->join('agents', 'users.id', '=', 'agents.user_id')
            ->select('users.id', 'users.first_name', 'users.last_name', 'users.email')

            ->where('agents.category', 'like', '%'.$category.'%')

            ->orWhere('agents.location', 'like', '%'.$operation.'%')
            ->get();

在此查询中,如果变量$category为空,则无需在条件中运行。并且$operation为null需要跳过条件的地方。如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

尝试以下方法:

$users =  User::orderBy('id','asc')->join('agents', 'users.id', '=', 'agents.user_id')->select('users.id', 'users.first_name', 'users.last_name', 'users.email');
if(!is_null($category)) {
$users =  $users->where('agents.category', 'like', '%'.$category.'%')->orWhere('agents.location', 'like', '%'.$operation.'%');
}
$users = $users->get();

或:

$users =  User::orderBy('id','asc')->join('agents', 'users.id', '=', 'agents.user_id')->select('users.id', 'users.first_name', 'users.last_name', 'users.email')->where('agents.location', 'like', '%'.$operation.'%');
if(!is_null($category)) {
$users =  $users->orWhere('agents.category', 'like', '%'.$category.'%');
}
$users = $users->get();