已加载的实体实例

时间:2017-07-12 16:13:47

标签: symfony doctrine-orm

我在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

之前触发事件

1 个答案:

答案 0 :(得分:4)

@PrePersist 仅在您插入新实体时触发。如果您已经找到了上面的现有实体,那么您需要使用 @PreUpdate 事件。

Doctrine documentation包含所有这些事件的信息。

当然,如果不知道您尝试做什么,并且看到了@PrePersist代码,就无法进一步帮助您。您可以像Cerad建议的那样使用onFlush。您可能需要prePersistpreUpdate

无论哪种方式,只需调用$em->persist() 就可以保证prePersist事件将被触发。