Doctrine 2:在DateTimeType.php中调用非对象的成员函数format()

时间:2010-07-31 15:35:27

标签: php doctrine-orm doctrine

我有一个DateTime字段:

/**
 * Date time posted
 * @Column(type="datetime")
 */
private $dtPosted;

使用LifeCycleCallback

设置为默认值
/**
 * @PrePersist
 */
function onPrePersist() {
    // set default date
    $this->dtPosted = date('Y-m-d H:m:s');

我收到以下错误:

  

致命错误:调用成员函数   format()在非对象中   d:\ ResourceLibrary \框架\原则\ LIB \原则\ DBAL \类型\ DateTimeType.php   第46行

4 个答案:

答案 0 :(得分:58)

date()函数返回一个字符串。 datetime类型适用于DateTime个对象。因此,要么将映射类型更改为string,要么使用DateTime个对象。

答案 1 :(得分:28)

你总是可以使用:

$this->updated = new \DateTime("now");

http://www.doctrine-project.org/docs/orm/2.0/en/cookbook/working-with-datetime.html

答案 2 :(得分:5)

尝试使用带有@ORM \ PrePersist注释的setCreated和带有@ORM \ PrePersist和@ORM \ PreUpdate方法注释的setUpdated,而不是prePersist和preUpdate方法......

/**
 * @ORM\PrePersist
 */
public function setCreated()
{
    $this->created = new \DateTime();
}

/**
 * @ORM\PrePersist
 * @ORM\PreUpdate
 */
public function setUpdated()
{
    $this->updated = new \DateTime();
}

答案 3 :(得分:3)

我遇到了类似的问题,但有一个time字段,这个问题和@romanb的答案都有帮助。

我收到了以下错误,很像问题中的错误。

Call to a member function format() on a non-object in 
... /vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/TimeType.php on line 50

解决方案类似,对于time数据类型的字段,Doctrine将接受PHP DateInterval的实例

$quizFixture1->setCompletionTime(\DateInterval::createFromDateString('743 seconds'));