Symfony 在预更新事件中插入实体
每当更新Symfony 在预更新事件中插入实体,symfony,doctrine-orm,Symfony,Doctrine Orm,每当更新消息时,我都试图持久化历史实体。我有太多的幕后工作要做,无法在这里发布所有代码,也无法让它有意义,但我基本上一直在跟踪问题,直到UnitOfWork::commit方法。在那里,UOW首先在entityInsertions中循环,没有找到任何内容,然后继续执行entityUpdates。UOW的entityInsertions在那里得到更新,但由于它已经通过了该循环,它没有意识到它仍然需要持久化某些实体。有没有办法强制UOW“重新启动”此过程?如果是,怎么做?我用的是第2.4条 谢谢你的
消息
时,我都试图持久化历史
实体。我有太多的幕后工作要做,无法在这里发布所有代码,也无法让它有意义,但我基本上一直在跟踪问题,直到UnitOfWork::commit
方法。在那里,UOW首先在entityInsertions
中循环,没有找到任何内容,然后继续执行entityUpdates
。UOW的entityInsertions
在那里得到更新,但由于它已经通过了该循环,它没有意识到它仍然需要持久化某些实体。有没有办法强制UOW“重新启动”此过程?如果是,怎么做?我用的是第2.4条
谢谢你的帮助 这可能是有史以来最肮脏的解决方案,但我最终做的基本上是以下几点
onFlush
事件订阅服务器UnitOfWork
的scheduledEntityUpdates
和scheduledEntityInserts
(我对删除不感兴趣)LoggableInterface
标记了我感兴趣的每个实体,只是为了知道哪些实体是可记录的)LoggableInterface
对象的日志记录而设置的)$classMeta = $this->entityManager->getClassMetadata(get_class($historyEntity));
$this->entityManager->getUnitOfWork()->computeChangeSet($classMeta, $historyEntity);
希望这对别人有帮助 您必须至少发布预更新代码。如果您要持久化另一个实体,我认为您需要通知UoW安排您的插入。