Laravel的"不等于"条件不按预期工作

15 浏览
0 Comments

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这为我提供了我想要的解决方案。

0
0 Comments

问题: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);

0