Php 处理Laravel数据库查询中的空值?

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

我发现我经常需要根据id以外的条件选择一个字段

所以,
$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


如果使用变量,请确保它们具有PHP
null
strict值。

是否存在这样的原因,即Where()没有任何逻辑可以在传递null时自动执行此操作?对不起,您必须这样做。将其作为问题/请求发布到github上也许……是的,可能会分叉,创建补丁,然后提交请求和拉请求。