我的控制器中有一些错误。
我通过此配置配置实体:
pv\MyBundle\Entity\NewsAuthorHistory:
type: entity
table: news_authors_history
fields:
id:
id: true
type: integer
unsigned: false
nullable: false
column: id
generator:
strategy: AUTO
date:
type: datetime
nullable: true
column: date
author_id:
type: integer
unsigned: true
column: author_id
nullable: false
news_id:
type: integer
unsigned: true
column: news_id
nullable: false
manyToOne:
news:
targetEntity: pv\MyBundle\Entity\News
joinColumn:
name: news_id
referencedColumnName: id
author:
targetEntity: pv\MyBundle\Entity\Authors
joinColumn:
name: author_id
referencedColumnName: id
我的控制器中有这段代码
$history_event = new NewsAuthorHistory();
$history_event->setAuthorId($author->getId());
$history_event->setNewsId($news->getId());
$history_event->setDate(\DateTime('now'));
$em->persist($history_event);
$em->flush();
但是,如果我尝试运行此代码,我就有了
致命错误:在非对象中调用成员函数format() /vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeType.php在线 53
我已经阅读了很多关于此错误的帖子,但找不到合适的解决方案。
更新 一些魔法! O_o我将以下代码添加到文件DateTimeType.php
if (!method_exists($value, 'format')) {
var_dump($value);
var_dump(debug_backtrace());
}
这里魔术开始......到日期字段填充...有关csrf-token的信息。 怎么样?为什么? - 我不知道...... :(
不幸的是,我无法解决问题。我通过SQL代码生成解决了这个问题,并将其实现指向实体管理器。
答案 0 :(得分:3)
$history_event->setDate(\DateTime('now'));
应该是
$history_event->setDate(new \DateTime());
您的错误是您没有实例化您的实体所期望的DateTime
对象。此外,请记住now
是DateTime
的默认参数。
您可以尝试在创建新的DateTime
之前插入此代码片段吗?
date_default_timezone_set('America/New_York'); //Just an example to understand what's going on
答案 1 :(得分:0)
在您更新后,我将DateTimeType.php中的convertToDatabaseValue修改为:
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
if(is_array($value)){
$value = date_create($value['year'].'-'.$value['month'].'-'.$value['day']);
}
return ($value !== null)
? $value->format($platform->getDateTimeFormatString()) : null;
}
现在可行。