Может ли кто-нибудь сказать мне, как добавить значение по умолчанию в столбец datetime? Я не могу сделать это вот так:
protected $registration_date = date("Y-m-d H:i:s", time());
Итак, как?
Может ли кто-нибудь сказать мне, как добавить значение по умолчанию в столбец datetime? Я не могу сделать это вот так:
protected $registration_date = date("Y-m-d 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();
}
}
Это работает как конструктор сохраняемого класса, не вызываемый гидратацией.
Вы также можете использовать обратные вызовы жизненного цикла, если хотите быть очень точными:
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\HasLifecycleCallbacks
* ...
*/
class MyEntity
{
/**
* @ORM\PrePersist
*/
public function onPrePersistSetRegistrationDate()
{
$this->registration_date = new \DateTime();
}
}
Для значения по умолчанию CURRENT_TIMESTAMP:
@ORM\Column(name="created_at", type="datetime", options={"default": "CURRENT_TIMESTAMP"})
Или для более старых версий Symfony:
@ORM\Column(name="created_at", type="datetime", options={"default": 0})
Работал для меня... Однако это работает только с MySQL.
Существует расширение для этого автоматизации этого...
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
для существующих строк.
@var string @ORM\Column(name="login_at", type="datetime", options={"default" = "CURRENT_TIMESTAMP"})
Это сработает. Просто опубликуйте для будущих ссылок.
Работа для меня с MySql и Symfony 3.4.
...
fields:
start_date:
type: date
nullable: false
options:
default: '1910-01-01'
comment: 'The default date is 1910-01-01'
...