在`postFlush`事件中创建新实体

时间:2018-07-17 15:07:48

标签: symfony doctrine-orm symfony4

我正在努力寻找在最终冲洗之后执行persist()flush()方法的方法(我主要想在postFlush事件中执行此方法)。

我在onFLush事件中(使用changeSets)收集必要的实体,并等待直到所有实体(我收集的实体)都被冲洗干净以获得其ID(自动递增)。 这样我就可以拥有一个数组,其中包含所有需要的实体及其变更集和ID集。 然后,我想基于先前收集的实体的字段创建新实体(我们称它们为“迹线”),并在数据库中持久化并刷新“迹线”。

但是我真的被困在这里,因为我不知道onFlush事件中的实体ID,并且当它们已经设置了ID时,我无法在postFlush中持久化并刷新它们。

当前Doctrine文档的状态如下:

  

postFlush在EntityManager#flush()的末尾被调用。 EntityManager#flush()无法在其侦听器内部安全地调用。

如果我敢这样做,它最终会递归,并且php会因错误而失败。

我可以采用哪种方法?

1 个答案:

答案 0 :(得分:0)

我相信您可以检查是否不刷新“跟踪”实体,然后执行“跟踪”创建。那不应该循环。

您可能还想看看symfony的eventDispatcher。您可以手动调度事件,因为它可能更干净。

有关“跟踪”的更多详细信息将很有帮助,据我所知,这是某种变更日志,历史记录;因此,我可能建议使用EntityAuditBundle。它在学说上效果很好,并且不难设置,我自己使用。