在Doctrine QueryBuilder中,我想查找日期字段没有实际日期的所有记录。但我发现日期'0000-00-00'
为NULL,并且它也是NOT 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有像以下那样的东西,那将会很酷:
$qb->select('t')
->from(myTable, 't')
->andWhere ... some condition...
->butDefinitelyNotWhere($qb->expr()->isNull('t.myDate'));
因为它不是找到日期为非NULL的所有记录,而是找到我正在寻找的内容:所有不属于日期"是&#34的集合的记录; NULL。
答案 0 :(得分:0)
我没有尝试,但也许有类似的事情:
->andWhere($qb->expr()->isNotNull('WEEK(t.myDate)'));