您可以使用
DoctrineORMEntityManager#getUnitOfWork获取
DoctrineORMUnitOfWork。
然后只需通过触发变更集计算(仅适用于托管实体)
DoctrineORMUnitOfWork#computeChangeSets()。
您也可以使用类似的方法,例如,
DoctrineORMUnitOfWork#recomputeSingleEntityChangeSet(DoctrineORMClassmetadata$meta, $entity)如果您确切知道要检查的内容而无需遍历整个对象图。
之后,您可以
DoctrineORMUnitOfWork#getEntityChangeSet($entity)用来检索对对象的所有更改。
把它放在一起:
$entity = $em->find('MyEntity', 1);$entity->setTitle('Changed Title!');$uow = $em->getUnitOfWork();$uow->computeChangeSets(); // do not compute changes if inside a listener$changeset = $uow->getEntityChangeSet($entity);注意。 如果尝试获取 preUpdate侦听器中
的已更新字段,请不要重新计算更改集,因为更改集已经完成。只需调用getEntityChangeSet即可获取对该实体所做的所有更改。
警告: 如评论中所述,此解决方案不应在Doctrine事件侦听器之外使用。这将破坏教义的行为。



