Doctrine 2: вызов функции-члена функции () для не-объекта … в DateTimeType.php

У меня есть поле DateTime :

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

который установлен на значение по умолчанию с помощью LifeCycleCallback

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

Я получаю следующую ошибку:

Неустранимая ошибка: вызывается в формате функции участника () для не-объекта в D: \ ResourceLibrary \ Frameworks \ Doctrine \ lib \ Doctrine \ DBAL \ Types \ DateTimeType.php в строке 46

Функция date() возвращает строку. Тип datetime работает с объектами DateTime . Поэтому либо измените тип отображения на string либо используйте объекты DateTime .

вы всегда можете использовать:

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

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

Попробуйте использовать 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(); } 

Я столкнулся с подобной проблемой, но с полем 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'));