我正在努力寻找在最终冲洗之后执行persist()
和flush()
方法的方法(我主要想在postFlush
事件中执行此方法)。
我在onFLush
事件中(使用changeSets)收集必要的实体,并等待直到所有实体(我收集的实体)都被冲洗干净以获得其ID(自动递增)。
这样我就可以拥有一个数组,其中包含所有需要的实体及其变更集和ID集。
然后,我想基于先前收集的实体的字段创建新实体(我们称它们为“迹线”),并在数据库中持久化并刷新“迹线”。
但是我真的被困在这里,因为我不知道onFlush
事件中的实体ID,并且当它们已经设置了ID时,我无法在postFlush
中持久化并刷新它们。
当前Doctrine文档的状态如下:
postFlush在EntityManager#flush()的末尾被调用。 EntityManager#flush()无法在其侦听器内部安全地调用。
如果我敢这样做,它最终会递归,并且php会因错误而失败。
我可以采用哪种方法?
答案 0 :(得分:0)
我相信您可以检查是否不刷新“跟踪”实体,然后执行“跟踪”创建。那不应该循环。
您可能还想看看symfony的eventDispatcher。您可以手动调度事件,因为它可能更干净。
有关“跟踪”的更多详细信息将很有帮助,据我所知,这是某种变更日志,历史记录;因此,我可能建议使用EntityAuditBundle。它在学说上效果很好,并且不难设置,我自己使用。