Доктрина 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


person Jiew Meng    schedule 31.07.2010    source источник


Ответы (4)


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

person romanb    schedule 31.07.2010
comment
ты прав. я должен использовать date_create(date(...)) или DateTime::__construct() - person Jiew Meng; 01.08.2010

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

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

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

person space_balls    schedule 01.09.2011
comment
или поместите use \DateTime; вверху файла, а затем $this->updated = new DateTime("now"); - person redolent; 06.05.2014

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

Я столкнулся с похожей проблемой, но с полем 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 примет экземпляр типа DateInterval PHP.

$quizFixture1->setCompletionTime(\DateInterval::createFromDateString('743 seconds'));
person Adam Elsodaney    schedule 22.03.2013