首页 > 解决方案 > Laravel 不等于不按预期工作

问题描述

我已经做了一些搜索,但找不到答案,所以非常感谢一些帮助。

我正在运行以下雄辩的陈述:

        $collection= Table1::select('table1.*','table2.finish_status_id')
                                ->join('table2','table2.id','=','table1.table2_id')
                                ->where('table1.id',$id)
                                 ->where('finish_status_id','=',6)
                                ->paginate(25);

此查询有效。

但是,我真正想要的是: ->where('finish_status_id','!=',6) 这不起作用,我没有得到任何结果。

以下这些查询变体都按预期工作

 ->where('finish_status_id','=',6)
 ->where('finish_status_id','=',null)
 ->where('finish_status_id','!=',null)
 ->where('finish_status_id','<>',null)

如果我没有看到为什么 != 不起作用的原因?

更新: 根据 ThataL 的建议,我尝试用 SQL 编写查询以使其正常工作。我无法得到我最初计划的内容,经过一番挖掘发现这个线程: SQL is null and = null

答案表明 NULL 不等于 SQL 中的“null”。因此,它被视为未知,而不是用“null”值填充的值。

使用我的 != 6 短语,我也期望收到所有空值。但是,经过进一步检查,该查询有效,但它也不返回空记录。

进一步搜索后,我发现了我要在这个线程上寻找的内容:Laravel 4 Eloquent Query Using WHERE with OR AND OR?

最初,简单地添加一个 'whereNull('finish_Status_id')' 是行不通的,因为作为一个或,它基本上忽略了我之前的 where 子句。(即,它得到所有为空的东西,或者,所有带有 $id 的东西)。

然后我将我的代码更新为以下

$collection= Table1::select('table1.*','table2.finish_status_id')
                                ->join('table2','table2.id','=','table1.table2_id')
                                ->where('table1.id',$id)
                                ->where(function ($query) {
                                        $query->where('finish_status_id', '!=', 6)
                                              ->orWhereNull('finish_status_id');
                                    })
                                ->paginate(25);

这为我提供了我所追求的解决方案。

标签: laraveleloquent

解决方案


这是将 null 包含到查询中的正确代码。

$collection= Table1::select('table1.*','table2.finish_status_id')
                                ->join('table2','table2.id','=','table1.table2_id')
                                ->where('table1.id',$id)
                                ->where(function ($query) {
                                        $query->where('finish_status_id', '!=', 6)
                                              ->orWhereNull('finish_status_id');
                                    })
                                ->paginate(25);

推荐阅读