【问题标题】:In Doctrine and mySql, how to query records that do not have dates在Doctrine和mySql中,如何查询没有日期的记录
【发布时间】: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


【解决方案1】:

我没有尝试,但可能是这样的:

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

【讨论】:

  • [Syntax Error] line 0, col 79: Error: Expected known function, got 'WEEK'
  • 同样的错误。在 mySql 中使用 WEEK('myDate') is not null 编写查询可以在那里工作,但我无法让 Doctrine 生成有效的查询。
  • 要使WEEK (...) 工作,您需要User defined function
猜你喜欢
  • 2022-01-10
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 2021-05-08
  • 1970-01-01
相关资源
最近更新 更多