当 Laravel 查询中的搜索键不为空时执行 where 条件

Execute a where condition when search key is not null in Laravel query

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

$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为空则不需要运行那个where条件。并且 $operation 为 null 需要跳过 where 条件。如何解决这个问题?

尝试以下操作:

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