学说2:调用一个成员函数格式()一个非对象...在DateTimeType.php

问题描述:

我有一个DateTime字段:学说2:调用一个成员函数格式()一个非对象...在DateTimeType.php

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

它是通过使用一个LifeCycleCallback设置为默认值

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

我收到以下错误:

Fatal error: Call to a member function format() on a non-object in D:\ResourceLibrary\Frameworks\Doctrine\lib\Doctrine\DBAL\Types\DateTimeType.php on line 46

date()本功能离子返回一个字符串。 datetime类型与DateTime对象一起使用。因此,请将映射类型更改为string或使用DateTime对象。

+10

你是对的。我使用'date_create(date(...))'或'DateTime :: __ construct()' – 2010-08-01 03:25:11

+0

@JiewMeng:很好的解决方案,谢谢! – Ron 2012-12-28 13:37:13

,你总是可以使用:

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

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

+0

或将'use \ DateTime;'放在文件顶部,然后'$ this-> updated = new DateTime(“now”);' – redolent 2014-05-06 17:25:04

+0

感谢它的工作:) – 2015-09-10 10:20:57

我碰到类似的问题,但有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数据类型的字段,学说将接受PHP的DateInterval

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

尝试的实例,并用你的setCreated与注解@ORM \ PrePersist与注释setUpdated对于@ORM \ PrePersist和@ORM \ PreUpdate方法,而不是prePersist和preUpdate方法...

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

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