Доктрина 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
4 answers
Функция 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
Попробуйте использовать свой набор, созданный с аннотациями для методов @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
Доктрина примет экземпляр PHP DateInterval
$quizFixture1->setCompletionTime(\DateInterval::createFromDateString('743 seconds'));