Symfony错误:在字符串上调用成员函数format()

时间:2017-05-09 16:18:02

标签: php symfony doctrine

我知道在我的问题中有一些关于stackoverflow的帖子,但是没有一个响应似乎对我有用,这就是我在这里发帖的原因。

我有一个带有created_at和updated_at的类,两者都期望有一个日期时间值

在我的二传手中,我有:

$date = new \DateTime('now');
$stimestamp = $date->format('M-d-Y H:i:s');
$this->setUpdatedAt($stimestamp);

使用以下

时会发生同样的错误
 $this->setUpdatedAt(strtotime($stimestamp));

我收到以下错误: 错误:在字符串

上调用成员函数format()

我的Oracle数据库期望日期时间跟随'DD-MON-YYYY',但是doctrine正在生成查询'Y-d-M'我认为是UNIX格式。

如何解决我可以发送正确的日期时间值和格式?

2 个答案:

答案 0 :(得分:0)

尝试使用它,如果它可以解决问题(当然不要忘记根据你的语言环境改变格式字符串)。

   $em = $this->get('doctrine.orm.default_entity_manager');
   $dbh = $em->getConnection();
   $sth = $dbh->prepare("ALTER SESSION SET 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'");
   $sth->execute();

答案 1 :(得分:0)

我在Stackoverflow上的另一篇文章中找到了解决方案,不幸的是我丢失了链接。 Jan Rydrych的回答是正确的,但我不想在控制器类上应用他的解决方案,而是想让它成为全球性的。

在symfony中,在服务下我添加了以下内容:

应用程序/ config.services.yml

oci8.listener:
        class: Doctrine\DBAL\Event\Listeners\OracleSessionInit
        arguments:
            - { NLS_TIMESTAMP_TZ_FORMAT: "YYYY-MM-DD HH24:MI:SSTZH:TZM" }
        tags:
            - { name: doctrine.event_listener, event: postConnect }

以上解决了这个问题。

谢谢大家的帮助。