有人可以告诉我如何在日期时间列上添加默认值吗?我不能这样做:
protected $registration_date = date("Y-m-d H:i:s", time());
那么我该如何处理呢?
对于默认值 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。
您将属性映射为 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();
}
}
有一个扩展可以自动执行此操作...
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'
...
对于
doctrine-bundle: 2.10
和 PHP 属性,设置默认值:
#[ORM\Column(options: ['default' => 0])]
private bool $isActive = false;