3

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

所以,$user = User::where('last_login', $lastLogin)->where('last_warning', $lastWarning)->get();完美运行。

直到您设置允许空值的位置之一(让我们做last_login)。

也就是说,它可以有一个值或为空。

这意味着您需要使用两个功能之一,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

4 回答 4

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'

于 2013-02-20T16:42:41.790 回答
3

你可以试试这个:

User::where(function($query) use ($lastlogin)
        {
            if(is_null($lastLogin))
            {
                $query->whereNull('last_login');
            }
            else
            {
                $query->where('last_login', '=', $lastLogin);
            }
        })->get();

在处理具有多个参数的长查询时,这是一个很好的解决方案。

于 2015-01-16T11:11:05.370 回答
1

You can use DB::raw() as well:

User::where('last_login', 'IS', DB::raw('null'))->where_last_warning($lastWarning)->get();
于 2013-02-20T17:03:03.153 回答
1

从 Laravel 5.3 开始,你现在可以->where('column', null)自动生成WHERE column IS NULL.

如果使用变量,请确保它们具有 PHPnull严格值。

于 2016-10-18T19:09:32.707 回答