29

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

我收到以下错误:

致命错误:在第 46 行对 D:\ResourceLibrary\Frameworks\Doctrine\lib\Doctrine\DBAL\Types\DateTimeType.php 中的非对象调用成员函数 format()

4

4 回答 4

60

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

于 2010-07-31T19:38:06.013 回答
28

你总是可以使用:

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

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

于 2011-09-01T15:04:27.080 回答
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();
}
于 2015-07-31T13:16:55.177 回答
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'));
于 2013-03-22T12:49:38.313 回答