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


У меня есть поле 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\Frameworks\Doctrine\lib\Doctrine\DBAL\Types\DateTimeType.php в строке 46

Author: Chris McFarland, 2010-07-31

4 answers

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

 58
Author: romanb, 2015-10-08 03:05:13

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

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

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

 28
Author: space_balls, 2011-09-01 15:04:27

Попробуйте использовать свой набор, созданный с аннотациями для методов @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();
}
 5
Author: MediaVince, 2015-07-31 13:16:55

Я столкнулся с аналогичной проблемой, но с полем 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'));
 3
Author: Adam Elsodaney, 2013-03-22 12:49:38