使用DateTime设置日期时出现Symfony2格式错误

时间:2016-07-27 13:00:43

标签: php mysql symfony datetime doctrine

我有需要插入数据库的日期值。 如果我尝试添加一个简单的字符串:

$user->setUpdatedAt('2015-05-31 05:46:23')

ofc我得到错误,该值必须是DateTime对象。

所以我创建了datetime对象:

$user->setUpdatedAt(new \DateTime($row[29]))

这会创建:

object(DateTime)[1052]
  public 'date' => string '2015-05-31 05:46:23' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'Europe/Paris' (length=12)

但是当我尝试冲洗时,我得到:

  

在非对象

上调用成员函数format()

为什么它看不到它是一个物体,当它显然是?

更新:

实体类我是一个简单的FOSUser生成实体:

/**
 * @var \DateTime
 */
protected $createdAt;

/**
 * @var \DateTime
 */
protected $updatedAt;

/**
 * Sets the last update date.
 *
 * @param \DateTime|null $updatedAt
 *
 * @return User
 */
public function setUpdatedAt(\DateTime $updatedAt = null)
{
    $this->updatedAt = $updatedAt;

    return $this;
}

/**
 * Returns the last update date.
 *
 * @return \DateTime|null
 */
public function getUpdatedAt()
{
    return $this->updatedAt;
}

/**
 * Hook on pre-persist operations.
 */
public function prePersist()
{
    $this->createdAt = new \DateTime();
    $this->updatedAt = new \DateTime();
}

1 个答案:

答案 0 :(得分:0)

Doctrine的日期类型将传入值(DateTime对象,当然,如果将字段类型设置为date,datetime,datetimetz)转换为字符串,并在从db获取时将它们转换回DateTime对象。尝试根据您的映射类型找到正确的类(DateTimeType.php,DateTimeTzType.php,DateType.php)并调试convertToDatabaseValue方法(例如:dump($value);die();),检查即将发生的值。或者使用xdebug,从setter调试到convertToDatabaseValue方法。