【发布时间】:2012-01-30 23:04:02
【问题描述】:
我很难解决这个问题。我在尝试持久化实体时遇到以下错误(请参阅下面的源代码):
Fatal error: Call to a member function format() on a non-object
in *****\vendor\doctrine-dbal\lib\Doctrine\DBAL\Types\DateTimeTzType.php
on line 64
这是实体代码的 sn-p:
namespace ****\Bundle\****Bundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* ****\Bundle\****Bundle\Entity\MyEntity
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="****\Bundle\****Bundle\Entity\****Repository")
* @ORM\HasLifecycleCallbacks()
*/
class MyEntity
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var \DateTime $created_at
*
* @ORM\Column(name="created_at", type="datetime")
*/
private $created_at;
/**
* @var \DateTime $updated_at
*
* @ORM\Column(name="updated_at", type="datetime", nullable="true")
*/
private $updated_at;
/**
* Set created_at
*
* @param datetime $createdAt
*/
public function setCreatedAt($createdAt)
{
$this->created_at = $createdAt;
}
/**
* Get created_at
*
* @return datetime
*/
public function getCreatedAt()
{
return $this->created_at;
}
/**
* Set updated_at
*
* @param datetime $updatedAt
*/
public function setUpdatedAt($updatedAt)
{
$this->updated_at = $updatedAt;
}
/**
* Get updated_at
*
* @return datetime
*/
public function getUpdatedAt()
{
return $this->updated_at;
}
/**
* @ORM\PrePersist()
*/
public function executePrePersist()
{
$this->created_at = new \DateTime();
}
/**
* @ORM\PreUpdate()
*/
public function executePreUpdate()
{
$this->updated_at = new \DateTime();
}
}
在这里发帖之前,我已经添加了:
print_r(get_class($value))
到有问题的地方的 DateTimeTzType.php 知道它收到了哪种数据,我得到了以下错误:
Warning: get_class() expects parameter 1 to be object, string given
所以它似乎接收的是字符串而不是 DateTime 对象,然后因为字符串没有 format() 方法而失败。
我正在使用 Symfony 2.0.9。我错过了什么吗?
【问题讨论】:
标签: php datetime symfony1 doctrine