Is there a built-in way to get all of the changed/updated fields in a Doctrine 2 entity?
Yes, Doctrine 2 provides a built-in way to get the changed fields in an entity. The UnitOfWork
class, which is responsible for tracking changes to entities, has a method called getEntityChangeSet()
which returns an array of changes made to a given entity. The array keys are the field names and the values are an array with the old and new values of the field.
For example, you can use this method like this:
<?php
$entity = // ...
$uow = $entityManager->getUnitOfWork();
$changeSet = $uow->getEntityChangeSet($entity);
You can also use the method getScheduledEntityUpdates()
to get all entities that have been scheduled for update during a flush operation.