在preUpdate事件中插入实体

时间:2014-11-10 11:41:36

标签: symfony doctrine-orm

每当History更新时,我都会尝试保留Message实体。我在幕后花了太多时间在这里发布所有代码并使其有意义,但我基本上将问题跟踪到UnitOfWork::commit方法。在那里,UOW首先遍历entityInsertions,并且什么都没找到,继续到entityUpdates。在那里,UOW的entityInsertions会得到更新,但由于它已经过了那个循环,所以它仍然需要保留一些实体。有没有办法迫使UOW重新开始"这个流程?如果是这样,怎么样?我正在使用Doctrine 2.4。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这可能是有史以来最脏的解决方案,但我最终做的基本上是以下......

  1. 创建onFlush活动订阅者
  2. 将整个容器注入订阅者(因为只注入实体管理器会导致循环引用错误)
  3. 循环浏览UnitOfWork的{​​{1}}和scheduledEntityUpdates(我对删除不感兴趣)
  4. 处理您感兴趣的每个预定更新或插入(在我的情况下,我使用scheduledEntityInserts标记了我感兴趣的每个实体,只是为了知道哪些实体是可记录的)
  5. 使用处理程序链处理相关对象(这只是我自己的算法,你可能不需要这个。这是为了以不同的方式处理不同LoggableInterface对象的记录)。
  6. 通过实体管理器保留实体(实际历史事件),并执行以下操作:

    LoggableInterface
  7. 利润

  8. 希望这有助于某人!