Vous pouvez utiliser Doctrine\ORM\EntityManager#getUnitOfWork
pour obtenir un Doctrine\ORM\UnitOfWork
.
Ensuite, il suffit de déclencher le calcul des changeset (fonctionne uniquement sur les entités gérées) via Doctrine\ORM\UnitOfWork#computeChangeSets()
.
Vous pouvez également utiliser des méthodes similaires comme Doctrine\ORM\UnitOfWork#recomputeSingleEntityChangeSet(Doctrine\ORM\ClassMetadata $meta, $entity)
si vous savez exactement ce que vous voulez vérifier sans itérer sur l'ensemble du graphe d'objets.
Après cela, vous pouvez utiliser Doctrine\ORM\UnitOfWork#getEntityChangeSet($entity)
pour récupérer toutes les modifications apportées à votre objet.
Assemblage :
$entity = $em->find('My\Entity', 1);
$entity->setTitle('Changed Title!');
$uow = $em->getUnitOfWork();
$uow->computeChangeSets(); // do not compute changes if inside a listener
$changeset = $uow->getEntityChangeSet($entity);
Note. Si vous essayez d'obtenir les champs mis à jour dans un écouteur preUpdate ne recalculez pas l'ensemble des changements, car cela a déjà été fait. Il suffit d'appeler le getEntityChangeSet pour obtenir toutes les modifications apportées à l'entité.
Attention : Comme expliqué dans les commentaires, cette solution ne doit pas être utilisée en dehors des écouteurs d'événements de Doctrine. Cela briserait le comportement de Doctrine.