2017-05-09 44 views
0

我知道在我的问题的附近有一些关于stackoverflow的帖子,但没有一个回复似乎对我有用,这就是为什么我发布这里。Symfony错误:在字符串上调用成员函数格式()

我有created_at和的updated_at一类,既期待datetime值

在我的二传手,我有:

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

$this->setUpdatedAt(strtotime($stimestamp)); 
发生

同样的错误

我收到以下错误: 错误:调用成员函数格式()字符串

我的Oracle数据库预计日期时间如下'DD-MON-YYYY',但教条正在生成查询'Y-d-M',我认为这是UNIX格式。

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

+0

这应该可以正常工作。你在var_dump($ date);'时得到了什么? – aynber

+0

转储显示正确的值,但只要我打电话$ this-> setUpdatedAt(strtotime($ stimestamp))是当我得到错误 – CookieMonster

+0

你写了created_at和updated_at期待datetime值,但DateTime :: format返回一个字符串,那么setUpdatedAt()方法的实现如何呢? –

回答

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(); 
+0

我认为我们在这里正确的轨道,在我的情况下,控制器看起来像这样:$ em = $ this-> getDoctrine() - > getManager(); $ EM->坚持($对象); $ em-> flush();你的一些方法不可用,如getConnection和准备 – CookieMonster

+0

@CookieMonster答案更新... –

+0

另一种选择是创建自定义映射类型,然后用它代替标准的Doctrine datetime。查看http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/types.html#custom-mapping-types –

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 } 

上述问题迎刃而解。

谢谢大家的帮助。

相关问题