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

时间:2013-02-20 14:17:49

标签: php mysql null laravel laravel-4

我发现我经常需要根据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无效的地方!

4 个答案:

答案 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严格值。