Doctrine 2.1 – значение по умолчанию столбца datetime

Может ли кто-нибудь сказать мне, как добавить значение по умолчанию в столбце datetime? Я не могу так:

protected $registration_date = date("Ymd H:i:s", time()); 

Так как?

Вы сопоставляете свою собственность с типом DateTime, а затем устанавливаете значение в конструкторе, используя новый экземпляр DateTime:

 /** * @Entity * @Table(name="...") */ class MyEntity { /** @Column(type="datetime") */ protected $registration_date; public function __construct() { $this->registration_date = new DateTime(); } } 

Это работает как конструктор сохраняемого класса, не призванный к гидратации.

Вы также можете использовать обратные вызовы жизненного цикла, если хотите быть очень точными:

 /** * @HasLifecycleCallbacks * ... */ class MyEntity { /** * @PrePersist */ public function onPrePersistSetRegistrationDate() { $this->registration_date = new \DateTime(); } } 

Для значения по умолчанию CURRENT_TIMESTAMP:

  @ORM\Column(name="created_at", type="datetime", options={"default": 0}) 

Работал для меня …

Существует расширение для этого автоматизации этого …

https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/timestampable.md

 /** * @var \DateTime * * @ORM\Column(name="date_added", type="datetime") * @Gedmo\Timestampable(on="create") */ private $date_added; /** * @var \DateTime * * @ORM\Column(name="date_modified", type="datetime") * @Gedmo\Timestampable(on="update") */ private $date_modified; 

Я думаю, лучший способ выполнить автозаполнение для datetime – это сделать так:

 * @ORM\Column(type="datetime", options={"default"="CURRENT_TIMESTAMP"}) 

Включение логики в конструктор является неправильным решением, потому что установка значений по умолчанию – это ответственность клиента SQL . Если вы решите больше не использовать ORM, вы потеряете бизнес-логику. Кроме того, при использовании конструктора вы не сможете добавлять метки времени по умолчанию для атрибутов datetime для существующих строк .