我在 Symfony 2.0 环境中使用 Doctrine 2.1.7。为了正确处理日期和时间,我使用自定义的“日期时间”类型将每个日期和时间以 UTC 格式保存在数据库中。当我加载它们时,所有内容都会转换为当前时区。这完美地工作并且配置如下(在我的 Symfony 项目中config.yml
):
doctrine:
dbal:
default_connection: default
types:
datetime: Acme\DemoBundle\General\UTCDateTimeType
我有一个Usage
使用日期属性调用的实体,它具有日期类型。不知何故,我未能检索到特定日期的任何使用信息,比如 2013 年 2 月 18 日。最终打开MySQL查询日志,发现执行了如下查询:
...
FROM account a0_
LEFT JOIN resource_usage r1_
ON a0_.id = r1_.account_id AND (r1_.date = '2013-02-17 23:00:00')
WHERE...
所以这是有趣的部分,我相信有两件事出了问题。似乎datetime
发生了自定义类型转换(我在 GMT+1)并且 Doctrine2 使用了错误的日期格式字符串。当应用自定义日期时间时,Doctrine2 是否会以某种方式覆盖常规日期类型?还是我做错了什么?
(我WITH
在我的 DQL 中使用了该构造,但是当我在 . 中使用相同的比较时也会发生这种情况WHERE
。)