在Doctrine和mySql中,如何查询没有日期的记录

时间:2018-05-17 06:37:39

标签: mysql doctrine-orm doctrine doctrine-query

在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。

1 个答案:

答案 0 :(得分:0)

我没有尝试,但也许有类似的事情:

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