У меня есть этот запрос в Laravel 5.7:
users = User::where('role', 'sales')
->where('tasks', '!=', 'lead')
->orderBy('last_name')
->get();
Я ожидал, что этот запрос получит всех пользователей, имеющих роль продаж , если они не помечены как ведущие в столбце tasks
(который может быть NULL
). Но теперь я должен был понять, что в моем приложении, когда tasks
имеют NULL
, пользователь не будет частью коллекции.
Это обычное поведение? Если так, как я должен подойти к этой проблеме? Если нет, что может вызвать это?
Всего 1 ответ
в SQL сложно: ничто не равно null
, и ничто не отличается от null
(даже самого null
). Таким образом, условие null != 'foo'
ложно.
Вы должны явно чек на ноль. В чистом SQL это будет выглядеть так:
where tasks is null or tasks != lead
В Lavarel это можно сделать с помощью расширенного условия where
:
->where(function ($query) { $query->where('tasks', '!=', 'lead')->orWhereNull('task'); } )