Php 处理Laravel数据库查询中的空值?
我发现我经常需要根据id以外的条件选择一个字段 所以,Php 处理Laravel数据库查询中的空值?,php,mysql,null,laravel,laravel-4,Php,Mysql,Null,Laravel,Laravel 4,我发现我经常需要根据id以外的条件选择一个字段 所以,$user=user::where('last_login',$lastLogin)->where('last_warning',$lastWarning)->get()工作正常 直到您将其中一个where's设置为允许空(让我们执行上次登录) 也就是说,它可以有值,也可以为null 这意味着您需要使用两个函数中的一个,即where()或whereNull(),要做到这一点,您需要断开链,使其成为 $user = User::where('l
$user=user::where('last_login',$lastLogin)->where('last_warning',$lastWarning)->get()代码>工作正常
直到您将其中一个where's设置为允许空(让我们执行上次登录
)
也就是说,它可以有值,也可以为null
这意味着您需要使用两个函数中的一个,即where()
或whereNull()
,要做到这一点,您需要断开链,使其成为
$user = User::where('last_warning', $lastWarning);
is_null($lastLogin) ? $user->whereNull('last_login') : $user->where('last_login', $lastLogin);
$user = $user->get();
我想知道哪里有办法解决这个问题?当前,如果您将null
传递到获取where column=null
的位置,则该操作不起作用 有两种选择:
选项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();
}
$user = User::where('last_login', (is_null($lastLogin) ? 'IS' : '=') ,$lastLogin)->where('last_warning', $lastWarning)->get();
选项2:
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();
}
$user = User::where('last_login', (is_null($lastLogin) ? 'IS' : '=') ,$lastLogin)->where('last_warning', $lastWarning)->get();
选项二使查询“其中最后一个登录名=x”
或“其中最后一个登录名为null
”您也可以使用DB::raw()
您可以尝试以下方法:
User::where(function($query) use ($lastlogin)
{
if(is_null($lastLogin))
{
$query->whereNull('last_login');
}
else
{
$query->where('last_login', '=', $lastLogin);
}
})->get();
当处理具有多个参数的长查询时,这是一个很好的解决方案。从Laravel 5.3开始,您现在可以->where('column',null)
自动生成where column is null
如果使用变量,请确保它们具有PHPnull
strict值。是否存在这样的原因,即Where()没有任何逻辑可以在传递null时自动执行此操作?对不起,您必须这样做。将其作为问题/请求发布到github上也许……是的,可能会分叉,创建补丁,然后提交请求和拉请求。