Laravel的"不等于"条件不按预期工作
Laravel的"不等于"条件不按预期工作
我已经搜索了一些内容,但是找不到答案,所以希望能得到帮助。\n我正在运行以下的Eloquent语句:\n
$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);
\n这个查询是有效的。\n然而,我实际想要的是:`->where(\'finish_status_id\',\'!=\',6)`\n这个查询不起作用,我得不到结果。\n下面的查询变体都按预期工作:\n
->where('finish_status_id','=',6) ->where('finish_status_id','=',null) ->where('finish_status_id','!=',null) ->where('finish_status_id','<>',null)
\n我是否错过了不起作用的原因?\n更新:\n根据ThataL的建议,我尝试以SQL形式编写查询语句来使其起作用。\n我无法得到最初的计划,并在一些搜索中找到了这个线程:\nSQL is null and = null\n答案表明,在SQL中NULL不等于\'null\'。因此,它被视为未知,而不是填充了值为\'null\'的值。\n使用!= 6,我期望收到所有的null值。然而,在进一步检查后,发现该查询是有效的,只是它也不返回null记录。\n在进一步搜索后,我在这个线程中找到了我应该寻找的答案:Laravel 4 Eloquent Query Using WHERE with OR AND OR?\n最初,简单地添加`whereNull(\'finish_Status_id\')`是无效的,因为它是一个或,它基本上忽略了我之前的where子句(即,它获取了所有为null的值,或者$id的所有值)。\n然后,我更新了我的代码如下:\n
$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);
\n这为我提供了我想要的解决方案。
问题:Laravel的where not equal(不等于)条件在使用时没有按照预期工作。
原因:可能是由于查询条件的书写不正确导致的。
解决方法:将查询条件的书写进行修改,按照以下方式进行编写:
$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);