0
0

More than 3 years have passed since last update.

Doctrine で Oracle の日付を扱う時にすること

Posted at

Symfony を使っていて Doctrine で Oracle データベースの日付を扱う時に

Could not convert database value "10-11-10" to Doctrine Type date

というようなエラーがでました。
Oralce が返してくる日付フォーマットと Doctrine のフォーマットが合わないので、このようなエラーが出ます。

sqlplus コマンドで、日付を含むテーブルをクエリしてみると、フォーマットがそのようになっています。NLS_DATE_FORMAT を指定すると、そのフォーマットで返ってくるようになります。

では、Symfony ではどうしたらよいのでしょう。

こちらの答えがありました。

service.yaml に次の定義を追加します。

    oracle.listener:
        class: Doctrine\DBAL\Event\Listeners\OracleSessionInit
        tags:
            - { name: doctrine.event_listener, event: postConnect }

このサービスは、Doctrine に初めから用意されているものです。

そのヘッダ部のコメントにこう書いてあります

/**
 * Should be used when Oracle Server default environment does not match the Doctrine requirements.
 *
 * The following environment variables are required for the Doctrine default date format:
 *
 * NLS_TIME_FORMAT="HH24:MI:SS"
 * NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
 * NLS_TIMESTAMP_FORMAT="YYYY-MM-DD HH24:MI:SS"
 * NLS_TIMESTAMP_TZ_FORMAT="YYYY-MM-DD HH24:MI:SS TZH:TZM"
 */

翻訳すると

Oracle Server のデフォルト環境が Doctrine の要件と一致しない場合に使われます。
Doctrine のデフォルトの日付書式には以下の環境変数が必要です。

ということで、この設定をすると Oracle の日付フィールドを適切に扱えるようになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0