如何在Symfony2中使用Doctrine OracleSessionInit监听器?

15

我正在使用Oracle,遇到以下错误:

无法将数据库值“17-NOV-11 12.17.33 AM”转换为Doctrine类型datetime。期望格式:Y-m-d H:i:s

此外,我无法创建新的行,因为Oracle会抱怨datetime格式。

我知道MySQL datetime格式和Oracle格式是不同的。

我了解您可以在Symfony 2中使用Doctrine监听器:

http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html

而且,已经创建了一个Doctrine监听器来解决这个问题:

Doctrine/DBAL/Event/Listeners/OracleSessionInit.php

问题是如何在Symfony 2中启用它。


谢谢,你节省了我很多时间!!!注意:这似乎也适用于Symfony 3。 - Vincent Pazeller
3个回答

17

看起来这次我自己回答了。

你需要使用事件标签将其添加为服务。

app/config/config.yml 

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

my.listener是该监听器的任意名称。


10

在我的情况下,Oracle是第二个连接(存储在oracle关键字下)。 该应用程序还使用了PostgreSQL(存储在default关键字下)。

问题在于Listener在默认数据库(PostgreSQL)上执行。 所以我将代码更改为:

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

一切正常!


-2

我认为这个链接会对你有所帮助:

使用Symfony2和Doctrine 2连接Oracle。

  1. 将Oracle的DATE类型映射到Doctrine的“date”类型,而不是Oracle驱动程序的“datetime”类型
  2. 正确配置Doctrine以使用最常见的Oracle日期和DateTime环境配置。您可能需要或不需要此项。请检查您的Oracle服务器配置

https://gist.github.com/johnkary/6481664#file-oracledoctrinetypemappinglistener-php


欢迎提供潜在解决方案的链接,但请添加链接周围的上下文,以便其他用户了解它是什么以及为什么存在。始终引用重要链接的最相关部分,以防目标站点无法访问或永久离线。请注意,仅仅是一个外部网站链接可能是回答被删除的原因之一 - Андрей Беньковский

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接