有人能告诉我如何在datetime列添加默认值吗?我不能这样做:
protected $registration_date = date("Y-m-d H:i:s", time());
那怎么样?
答案 0 :(得分:53)
如果您想要非常精确,还可以使用生命周期回调:
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\HasLifecycleCallbacks
* ...
*/
class MyEntity
{
/**
* @ORM\PrePersist
*/
public function onPrePersistSetRegistrationDate()
{
$this->registration_date = new \DateTime();
}
}
答案 1 :(得分:51)
默认值为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 。
答案 2 :(得分:36)
您将属性映射为DateTime类型,然后使用新的DateTime实例在构造函数中设置值:
/**
* @Entity
* @Table(name="...")
*/
class MyEntity
{
/** @Column(type="datetime") */
protected $registration_date;
public function __construct()
{
$this->registration_date = new DateTime();
}
}
这可以起作用,因为持久化类的构造函数不会被调用。
答案 3 :(得分:21)
这种自动化有一个扩展......
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;
答案 4 :(得分:19)
我认为,为datetime
完成自动填充的最佳方法是这样做:
* @ORM\Column(type="datetime", options={"default"="CURRENT_TIMESTAMP"})
将逻辑放入构造函数是不正确的解决方案,因为设置默认值是 SQL客户端责任。如果您决定不再使用ORM - 您将失去业务逻辑。另外,如果使用构造函数,您将无法为现有行的datetime
属性添加默认时间戳。
答案 5 :(得分:3)
@var string @ORM\Column(name="login_at", type="datetime", options={"default" = "CURRENT_TIMESTAMP"})
这会奏效。只是发布以备参考。
答案 6 :(得分:0)
使用MySql和Symfony 3.4为我工作。
...
fields:
start_date:
type: date
nullable: false
options:
default: '1910-01-01'
comment: 'The default date is 1910-01-01'
...