我有一堆同时包含date_created和date_modified字段的实体,我试图让这些字段在插入或更新时自动设置。 date_created仅在insert处设置,但date_modified在insert或update处设置。
我的实体类中有一个带有@PreUpdate注释的方法,但它似乎只在实体更新时被调用。插入新实体时不会调用它。文档说明了关于preUpdate事件:
“preUpdate事件发生在对实体数据的数据库更新操作之前。”
这是正确的行为吗?如果是这样,在更新或插入之前调用方法的最佳方法是什么?目前,如果我用@PreUpdate和@PrePersist标记方法,那么它可以工作,但我不确定这是否是最佳的:
/**
* @PreUpdate
* @PrePersist
*/
public function beforeSave()
{
if (!$this->getCreatedAt()) {
$this->setCreatedAt(new \DateTime());
}
$this->setModifiedAt(new \DateTime());
}
答案 0 :(得分:11)
持久和更新是两个不同的事件,所以如果你想要为它们应用回调,那么你将需要两个注释。它可以满足您的疑虑,而不是创建两种方法:
/**
* @PrePersist
*/
public function beforePersist()
{
$this->setCreatedAt(new \DateTime());
$this->setModifiedAt(new \DateTime());
}
/**
* @PreUpdate
*/
public function beforeUpdate()
{
$this->setModifiedAt(new \DateTime());
}