在同一个实体中,我有一个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/

10-11 20:40