【问题标题】:Dealing with null values in Laravel database query?在 Laravel 数据库查询中处理空值?
【发布时间】:2023-03-04 08:55:02
【问题描述】:

我发现我经常需要根据 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 的位置,这是行不通的!

【问题讨论】:

    标签: php mysql null laravel laravel-4


    【解决方案1】:

    两种选择:

    选项 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'

    【讨论】:

    • 如果通过 null ,是否有任何原因 Where() 没有任何逻辑可以自动执行此操作?
    • 对不起 - 你必须像泰勒那样。将其作为问题/请求发布在 github 上可能...
    • 是的,可能会分叉,创建补丁,然后通过拉取请求提交请求。
    【解决方案2】:

    你可以试试这个:

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

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

    【讨论】:

      【解决方案3】:

      您也可以使用 DB::raw():

      User::where('last_login', 'IS', DB::raw('null'))->where_last_warning($lastWarning)->get();
      

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多