在同一个实体中,我有一个PreUpdate和一个PrePersist。 PreUpdate会触发,但PrePersist不会触发。我在生命周期回调中的刷新和注释后放置了一个die()
。完整实体可以在http://pastebin.com/yUk1u4GQ上看到
实体回调
/**
* @PreUpdate
*/
public function fixDates(){
$this->updatedOn = $this->getNow();
$this->closedDate = null;
$this->openDate = null;
print "dates fixed";
}
/**
* @PrePersist
*/
public function prePersist() {
print 'in prePersist';
die();
}
实体管理器调用
$em->persist($school);
$em->flush();
die();
我的屏幕显示“固定日期”,但不显示prePersist消息。我的实体顶部确实有
@HasLifecycleCallbacks
。 最佳答案
仅当您执行INSERT
语句而不是UPDATE
语句时,才会触发PrePersist。
测试时,请不要忘记只有当实体属性真正改变时才触发UPDATE
语句。如果调用实体管理器以保留该实体,则它首先查看是否有任何更改。如果不是,则不执行任何SQL查询,并且不调用@PreUpdate
方法。
关于php - Doctrine 2 PrePersist不会开火,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7934555/