У меня есть поле 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
- Symfony и Doctrine - не могут удалить элемент из коллекции (отношение Many-to-Many с дополнительным полем)
- Zend Framework 2 - Формы аннотаций и Doctrine2 - Обрезаемая фатальная ошибка - ObjectManager
- Должен ли я использовать модель EAV?
- Doctrine2 - множественная вставка одним выстрелом
- Ошибка Symfony2 Doctrine Обнаруженная сущность типа Doctrine \ Common \ Collections \ ArrayCollection в ассоциации sth # vote, но ожидающая sth \ Vote
Функция 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'));