Reputation: 117
I have a User entity, and I would like to archive it when banned. I have the following preUpdate
listener:
/**
* @ORM\PreUpdate
*/
public function preUpdate(PreUpdateEventArgs $eventArgs) {
if ($eventArgs->hasChangedField('banned') {
$this->setIsArchived(true);
}
if ($eventArgs->hasChangedField('isArchived')) {
/* do Special work here */
}
}
How do I inform eventArgs
about the field changed inside the handler itself?
Upvotes: 2
Views: 2110
Reputation: 1489
if you edit an entity within the eventArgs, I think you need to persist it and then run the computeChangeSet or computeChangeSets in the UnitOfWork in order for you to use the hasChangedField:
$entity = $eventArgs->getObject();
$em = $eventArgs->getObjectManager();
$uow = $em->getUnitOfWork();
if ($eventArgs->hasChangedField('banned') {
$entity->setIsArchived(true);
$em->persist($entity);
}
$uow->computeChangeSets();
if ($eventArgs->hasChangedField('isArchived')) {
/* do Special work here */
}
Upvotes: 1