【发布时间】:2018-05-17 06:37:38
【问题描述】:
在 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 的集合的所有记录。
【问题讨论】:
-
您尝试过添加
->andWhere($qb->expr()->neq('t.myDate', ':nullDate'))->setParameter('nullDate', '0000-00-00')吗? -
我在问题中说我考虑过该选项,但它错过了实际上为空(空)的日期。
标签: mysql doctrine-orm doctrine doctrine-query