Красноречивый оператор whereRaw и orWhereRaw имеют значение NULL

Для поискового запроса у меня есть следующее:

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; действительно дает правильный результат для меня.

1

Решение

Не используйте whereRaw для проверки на ноль. Вы можете использовать это вместо:

->orWhereNull('column')

Правильный способ сделать первое, где, если вы не делаете что-то дополнительное, например, функцию mysql, это просто передать столбец следующим образом:

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

Вы можете на самом деле устранить равные, так как это по умолчанию. Итак, ваш запрос будет:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]