教义2 普雷西斯特不开火

2022-08-30 15:46:02

在同一个实体中,我有一个PreUpdate和一个PrePersist。PreUpdate会触发,但PrePersist永远不会。我在生命周期回调中放置了一个刷新和注释。完整的实体可以在 http://pastebin.com/yUk1u4GQdie()

实体回调

/**
* @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


答案 1

不要忘记在类注释中启用生命周期回调:

/**
 * Report\MainBundle\Entity\Serveur
 * @ORM\HasLifecycleCallbacks
 */
class Serveur {

答案 2

PrePersist 仅在您执行语句时触发,而不是语句。INSERTUPDATE

测试时,不要忘记,仅当实体属性真正更改时才会触发该语句。如果调用实体管理器来持久保存该实体,则它首先查看是否有任何更改。否则,不执行 sql 查询,也不调用任何方法。UPDATE@PreUpdate


推荐