我在Doctrine中遇到事件的问题,我需要在已经加载的持久对象上发生事件
$obj = $em->getRepository(EntityName::class)->findById($someId);
$obj2 = clone $obj;
$obj2->property = 'some value';
$obj->property = 'some diff value';
$em->persist($obj2);
$em->persist($obj);
我在事件EntityName
的{{1}}课程中注册了一个事件,这对@PrePersist
非常有用,但$obj2
没有触发事件,是否可以删除{{1}来自$obj
的{}和$obj
的火事件。
诀窍是我必须在$em->UnitOfWorks
答案 0 :(得分:4)
@PrePersist 仅在您插入新实体时触发。如果您已经找到了上面的现有实体,那么您需要使用 @PreUpdate 事件。
Doctrine documentation包含所有这些事件的信息。
当然,如果不知道您尝试做什么,并且看到了@PrePersist
代码,就无法进一步帮助您。您可以像Cerad建议的那样使用onFlush
。您可能需要prePersist
和preUpdate
。
无论哪种方式,只需调用$em->persist()
就可以保证prePersist
事件将被触发。