Eloquent не возвращает строку где ('foo', '! =', 'Bar'), если foo равен NULL

У меня есть этот запрос в 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'); } )

Есть идеи?

10000