我已经做了一些搜索,无法找到这个问题的答案,所以一些帮助将是非常感激的。
我正在运行以下雄辩的语句:
$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);