В Doctrine и mySql, как запрашивать записи, у которых нет дат - PullRequest
0 голосов
/ 17 мая 2018

В 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.

1 Ответ

0 голосов
/ 17 мая 2018

Я не пробовал, но может быть с чем-то вроде:

 ->andWhere($qb->expr()->isNotNull('WEEK(t.myDate)'));
...