Для поискового запроса у меня есть следующее:
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 и второй where), это также дает разные результаты. Похоже, что инклюзивный запрос не работает правильно в соответствии с предложением where. Если я использую обычные предложения where, у меня не возникает никаких проблем.
Бег SELECT * FROM events WHERE current_state='unavailable' OR current_state IS NULL;
действительно дает правильный результат для меня.
Не используйте whereRaw для проверки на ноль. Вы можете использовать это вместо:
->orWhereNull('column')
Правильный способ сделать первое, где, если вы не делаете что-то дополнительное, например, функцию mysql, это просто передать столбец следующим образом:
where('column', '=', 'foo')
Вы можете на самом деле устранить равные, так как это по умолчанию. Итак, ваш запрос будет:
DB::table('table')->where('column', 'foo')->orWhereNull('column')->get();
Других решений пока нет …