我有一个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行
答案 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'));