Laravel Where Not Equal Not Working As Expected



我已经做了一些搜索,无法找到这个问题的答案,所以一些帮助将是非常感激的。

我正在运行以下雄辩的语句:

$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)

如果有一个原因,我还没有看到为什么!=不工作?

更新:根据那个建议,我试着用SQL写我的查询来让它工作。我无法得到我最初的计划,经过一些挖掘发现了这个线程:SQL是null and = null

其中答案表示NULL在SQL中不等于' NULL '。因此,它被视为未知,而不是一个用'null'填充的值。

对于我的!= 6短语,我希望也能收到所有的空值。然而,进一步检查,该查询工作,除了它也不返回空记录。

经过进一步的搜索,我发现了我想在这个线程上寻找的东西:Laravel 4雄辩的查询使用WHERE with OR AND OR?

最初,简单地添加'whereNull('finish_Status_id')'不起作用,因为作为一个或,它基本上忽略了我以前的where子句。(也就是说,它得到了所有的null,或者所有的$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);

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

这是在查询中包含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);

最新更新