我有一个包含代码的实体存储库
$qb = $this->createQueryBuilder('tdd');
$qb->select('tdd')
->where($qb->expr()->eq('tdd.disable_date', ':dat'))
->setParameter('dat', new \DateTime());
return $qb->getQuery()->getOneOrNullResult();
仅包含一个成员的实体(禁用日期)
/**
* @ORM\Column(type="date", unique=true, nullable=false)
* @ORM\Id()
*/
private $disable_date;
当我试图检查今天的日期是否在数据库中时,上面的代码返回null。数据库中的日期已存在。搞什么鬼?
2条答案
按热度按时间thigvfpy1#
我用午夜修正器解决了这个问题。
当您在一个日期字段中声明时,在数据库中它将存储为日期时间,但实体使用日期时间接口。
因此,如果您尝试将一个新的\datetime(当前日期和时间)与存储在数据库中的日期(按条令解析为存储的日期+当前时间)进行比较,则比较结果永远不会相等。
使用午夜修正你真的是比较平等。
这可以在createquerybuilder或findby方法中应用
php.net/manual/en/datetime.formats.relative.php
pftdvrlh2#
因为
new DateTime()
创建类似以下内容的对象:object(DateTime)#1 (3) { ["date"]=> string(26) "2018-04-12 07:24:34.697668" ["timezone_type"]=> int(3) ["timezone"]=> string(10) "US/Pacific" }
你想把准确的日期和时间(包括seconds
以及ms
). 这就是为什么结果是null
不带日期的检查日期h:i:s