我发现我经常需要根据id以外的条件选择一个字段。
所以,$user = User::where('last_login', $lastLogin)->where('last_warning', $lastWarning)->get();
完美无缺。
直到你设置其中一个允许空值(让我们做last_login
)。
也就是说,它可以有一个值,也可以为null。
这意味着您需要使用两个函数where()
或whereNull()
中的一个来执行此操作,您需要打破链,因此它变为
$user = User::where('last_warning', $lastWarning);
is_null($lastLogin) ? $user->whereNull('last_login') : $user->where('last_login', $lastLogin);
$user = $user->get();
我想知道where
是否有办法解决这个问题?目前,如果您将null
传递到where column = null
无效的地方!
答案 0 :(得分:5)
两个选项:
选项1:
if (is_null($lastLogin))
{
$user = User::whereNull('last_login')->where('last_warning', $lastWarning)->get();
}
else
{
$user = User::where('last_login', $lastLogin)->where('last_warning', $lastWarning)->get();
}
选项2:
$user = User::where('last_login', (is_null($lastLogin) ? 'IS' : '=') ,$lastLogin)->where('last_warning', $lastWarning)->get();
选项二会使查询“where last_login = x'
或”where last_login IS null
“
答案 1 :(得分:3)
你可以试试这个:
User::where(function($query) use ($lastlogin)
{
if(is_null($lastLogin))
{
$query->whereNull('last_login');
}
else
{
$query->where('last_login', '=', $lastLogin);
}
})->get();
在处理具有多个参数的长查询时,这是一个很好的解决方案。
答案 2 :(得分:1)
您也可以使用DB :: raw():
User::where('last_login', 'IS', DB::raw('null'))->where_last_warning($lastWarning)->get();
答案 3 :(得分:1)
从Laravel 5.3开始,您现在可以->where('column', null)
自动生成WHERE column IS NULL
。
如果使用变量,请确保它们具有PHP null
严格值。