私はSymfony2.0環境でDoctrine2.1.7を使用しています。日付と時刻を正しく処理するために、カスタムの「datetime」タイプを使用して、すべての日付と時刻をUTCでデータベースに保存しています。それらをロードすると、すべてが現在のタイムゾーンに変換されます。これは完全に機能し、次のように構成されています(私のSymfonyプロジェクトではconfig.yml
):
doctrine:
dbal:
default_connection: default
types:
datetime: Acme\DemoBundle\General\UTCDateTimeType
Usage
日付タイプの日付属性で呼び出されたエンティティがあります。どういうわけか、特定の日付、たとえば2013-02-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...
これが面白い部分です。2つのことがうまくいかなかったと思います。カスタムdatetime
型変換が発生したようで(私はGMT + 1にいます)、Doctrine2で間違った日付形式の文字列が使用されています。Doctrine2は、カスタム日時が適用されたときに、通常の日付タイプを何らかの形でオーバーライドしますか?それとも私は何か間違ったことをしていますか?
(WITH
DQLで構成を使用していますが、内部で同じ比較を使用している場合にも発生しWHERE
ます。)