Доктрина 2. Вызов функции-члена format () для необъекта ... в DateTimeType.php - PullRequest
29 голосов
/ 31 июля 2010

У меня есть поле 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');

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

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

Ответы [ 4 ]

59 голосов
/ 31 июля 2010

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

28 голосов
/ 01 сентября 2011

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

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

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

5 голосов
/ 31 июля 2015

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

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