有人能告诉我如何在datetime列上添加默认值吗?我不能这样做:
protected $registration_date = date("Y-m-d H:i:s", time());
Run Code Online (Sandbox Code Playgroud)
又怎样?
san*_*nis 58
对于默认值CURRENT_TIMESTAMP:
@ORM\Column(name="created_at", type="datetime", options={"default": "CURRENT_TIMESTAMP"})
Run Code Online (Sandbox Code Playgroud)
或者对于较旧的Symfony版本:
@ORM\Column(name="created_at", type="datetime", options={"default": 0})
Run Code Online (Sandbox Code Playgroud)
为我工作......然而这只适用于MySQL.
Ale*_*tis 54
如果您想要非常精确,还可以使用生命周期回调:
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\HasLifecycleCallbacks
* ...
*/
class MyEntity
{
/**
* @ORM\PrePersist
*/
public function onPrePersistSetRegistrationDate()
{
$this->registration_date = new \DateTime();
}
}
Run Code Online (Sandbox Code Playgroud)
Max*_*Max 39
您将属性映射为DateTime类型,然后使用新的DateTime实例在构造函数中设置值:
/**
* @Entity
* @Table(name="...")
*/
class MyEntity
{
/** @Column(type="datetime") */
protected $registration_date;
public function __construct()
{
$this->registration_date = new DateTime();
}
}
Run Code Online (Sandbox Code Playgroud)
这是因为持久化类的构造函数不会被调用.
rat*_*m3n 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;
Run Code Online (Sandbox Code Playgroud)
小智 20
我认为,完成自动填充的最佳方法datetime是做到这样:
* @ORM\Column(type="datetime", options={"default"="CURRENT_TIMESTAMP"})
Run Code Online (Sandbox Code Playgroud)
将逻辑放到构造函数是不正确的解决方案,因为设置默认值是SQL客户端的责任.如果您决定不再使用ORM - 您将失去业务逻辑.另外,如果使用构造函数,您将无法datetime为现有行的属性添加默认时间戳.
小智 6
@var string @ORM\Column(name="login_at", type="datetime", options={"default" = "CURRENT_TIMESTAMP"})
Run Code Online (Sandbox Code Playgroud)
这将起作用。只是发布以供将来参考。