Laravel Eloquent, где поле X или null
У меня есть таблица вроде этого:
table
- field1: tinyint
- field2: varchar (nullable)
- datefield: timestamp (nullable)
Теперь я хочу получить все записи, где field1 равен 1, field2 - null, а поле даты меньше X или null. Я уже пробовал что-то вроде этого:
$query = Model::where('field1', 1)
->whereNull('field2')
->where('datefield', '<', $date)
->orWhereNull('datefield');
но это не работает. Я всегда получаю каждую запись, где поле даты равно null. Неважно, что такое другие поля. Я также попытался разбить его на 2 запроса: сначала получите каждую строку, где поле даты меньше X или null, а затем (на основе этого) получает каждое поле, где field1 равно 1, а field2 - null.
Результат был тот же.
Любая идея, как это сделать?
Ответы
Ответ 1
Похоже, вам нужно использовать advanced where clauses.
Учитывая, что поиск в field1
и field2
постоянный, мы оставим их как есть, но мы немного скорректируем ваш поиск в datefield
.
Попробуйте следующее:
$query = Model::where('field1', 1)
->whereNull('field2')
->where(function ($query) {
$query->where('datefield', '<', $date)
->orWhereNull('datefield');
}
);
Если вам нужно отлаживать запрос и видеть, почему он не работает, он может помочь увидеть, какой SQL он фактически выполняет. Вы можете связать ->toSql()
до конца своего красноречивого запроса, чтобы сгенерировать SQL.