Eloquent whereRaw语句和orWhereRaw为NULL

时间:2017-01-23 21:37:46

标签: php laravel laravel-eloquent

对于搜索查询,我有以下内容:

DB::whereRaw('column = ?', 'foo')->orWhereRaw('column IS NULL')->get();

添加orWhereRaw语句比仅whereRaw给出的结果少。不知何故,当添加另一个时,似乎忽略了第一个。它包含在SQL语句中。还有另一种比较字符串和空值的方法吗?

我也尝试了以下内容,如下所示:

return self::select('id')
    ->where('current_state', 'unavailable') 
    ->orWhereNull('current_state') 
    ->get();

如果我改变顺序(whereNull first和where second),这也会给我不同的结果。看起来好像包含查询与where子句对应无法正常运行。如果我使用常规where子句我不会遇到任何问题。

正在运行SELECT * FROM events WHERE current_state='unavailable' OR current_state IS NULL;会为我生成正确的结果。

1 个答案:

答案 0 :(得分:2)

不要使用whereRaw来检查null。您可以改为使用它:

->orWhereNull('column')

除非你正在做一些额外的事情,例如mysql函数,否则执行第一个的正确方法就是像这样传递列:

where('column', '=', 'foo') 

你实际上可以消除等号,因为它默认为那个。所以你的查询将是:

DB::table('table')->where('column', 'foo')->orWhereNull('column')->get();