对于搜索查询,我有以下内容:
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;
会为我生成正确的结果。
答案 0 :(得分:2)
不要使用whereRaw来检查null。您可以改为使用它:
->orWhereNull('column')
除非你正在做一些额外的事情,例如mysql函数,否则执行第一个的正确方法就是像这样传递列:
where('column', '=', 'foo')
你实际上可以消除等号,因为它默认为那个。所以你的查询将是:
DB::table('table')->where('column', 'foo')->orWhereNull('column')->get();