В Doctrine QueryBuilder я хочу найти все записи, в которых поле даты не имеет реальной даты.Однако я обнаружил, что дата '0000-00-00'
равна NULL и также не равна NULL.Другими словами,
$qb->select('t')
->from(myTable, 't')
->andWhere ... some condition...
->andWhere($qb->expr()->isNull('t.myDate'));
и
$qb->select('t')
->from(myTable, 't')
->andWhere ... some condition...
->andWhere($qb->expr()->isNotNull('t.myDate'));
включают записи, в которых значение в myDate
равно '0000-00-00'
.
Я подумал сделать что-тонапример,
$qb->select('t')
->from(myTable, 't')
->andWhere ... some condition...
->andWhere($qb->expr()->eq('t.myDate','?1'))
->setParameter(1, '0000-00-00');
, но 1), который выбирает только даты «0000-00-00» и пропускает даты, которые фактически равны нулю;и 2) я понимаю, что «0000-00-00» не всегда равно «0000-00-00»;даже если мой столбец имеет тип DATE, синтаксис $ qb-> expr () -> eq (...) может включать символы TIME (00:00:00).
круто, если бы в Doctrine было что-то вроде notWhere:
$qb->select('t')
->from(myTable, 't')
->andWhere ... some condition...
->butDefinitelyNotWhere($qb->expr()->isNull('t.myDate'));
, потому что вместо того, чтобы находить все записи, где дата НЕ NULL, он находит то, что я ищу: все записи, которые не принадлежатнабор, в котором дата "равна" NULL.