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 が間違っていて、リスナーが適切に設定されていません。
いくつかの助けをいただければ幸いです。
ありがとうございました。