【问题标题】:How to use Doctrine OracleSessionInit listener with Symfony2?如何在 Symfony2 中使用 Doctrine OracleSessionInit 监听器?
【发布时间】:2011-12-31 09:00:29
【问题描述】:

我正在使用 oracle,但收到此错误:

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

我也无法创建新行,因为 oracle 抱怨日期时间格式。

我知道mysql的日期时间格式和oracle的不一样。

我知道您可以在 symfony 2 中使用教义监听器:

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

而且,创建了一个原则侦听器来解决此问题:

Doctrine/DBAL/Event/Listeners/OracleSessionInit.php

问题是你到底是如何在 symfony 2 中打开它的。

【问题讨论】:

  • 谢谢,你为我节省了很多时间!!!注意:这似乎也适用于 Symfony 3

标签: symfony doctrine


【解决方案1】:

好吧,看来这次我会回答自己。

您必须使用事件标签将其添加为服务。

app/config/config.yml 

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

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

【讨论】:

    【解决方案2】:

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

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

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

    一切正常!

    【讨论】:

      【解决方案3】:

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

      使用 Symfony2 和 Doctrine 2 连接到 Oracle。

      1. 将 Oracle 的 DATE 类型映射到 Doctrine 的“日期”类型,而不是 Oracle 驱动程序的“日期时间”
      2. 正确配置 Doctrine 以使用最常见的 Oracle 日期和日期时间环境配置。你可能需要也可能不需要这个。检查您的 Oracle 服务器配置

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

      【讨论】:

      猜你喜欢
      • 2013-07-01
      • 1970-01-01
      • 2023-03-13
      • 2015-03-16
      • 2019-04-29
      • 2012-05-25
      • 2012-10-25
      • 2016-04-23
      • 2012-12-13
      相关资源
      最近更新 更多