2

symfony2 プロジェクトで oracle 10g データベースで doctrine を使用しようとしています。

すべて正常に動作していますが、テーブルに日付列を含む行を挿入しようとすると、次のエラーが発生します。

[PDOException] SQLSTATE[HY000]: 一般エラー: 1850 OCIStmtExecute: ORA-01850: ORA-01850: 時間は 0 から 23 の間でなければなりません (ext\pdo_oci\oci_statement.c:148)

How to use Doctrine OracleSessionInit listener with Symfony2? によると このエラーは、Doctrine の Event Manager に Doctrine\DBAL\Event\Listeners\OracleSessionInit クラスを追加することで修正できます。

app/config/config.yml 

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

この解決策を試しましたが、うまくいきませんでした。そのため、コントローラを介してドクトリンの eventManager にリスナを手動で追加しました。

public function indexAction()
    {
        $product= new Product();
        $product->setCreationDate(new \DateTime());
        $this->getDoctrine()->getConnection()->getEventManager()->addEventSubscriber($this->get('my.listener'));
        $em->persist($product);
        $em->flush();
        return array();
    }

これは機能していますが、これは本当にエレガントではなく、すべてのコントローラーでこれを行いたくありません...

したがって、リスナーは適切に機能しているようです。私の意見では、postConnect イベントがトリガーされないか、config.yml が間違っていて、リスナーが適切に設定されていません。

いくつかの助けをいただければ幸いです。

ありがとうございました。

4

1 に答える 1

0

m2mdasさん、ありがとうございます。あなたのアドバイスでイベント マネージャーをデバッグすることができましたが、リスナーがリストされていないことがわかりました。そのため、再度 config.yml を確認したところ、適切な形式ではないことがわかりました (2 つの空白文字が不足していました)。

とにかく、今は大丈夫です。ご協力ありがとうございました。

于 2012-09-26T09:50:34.407 に答える