getObjectManager(); $uow = $em->getUnitOfWork(); $meta = $em->getClassMetadata(Timesheet::class); foreach ($uow->getScheduledEntityUpdates() as $entity) { if (!($entity instanceof Timesheet)) { continue; } $this->calculateFields($entity, $uow->getEntityChangeSet($entity)); $uow->recomputeSingleEntityChangeSet($meta, $entity); } foreach ($uow->getScheduledEntityInsertions() as $entity) { if (!($entity instanceof Timesheet)) { continue; } $this->calculateFields($entity); $uow->recomputeSingleEntityChangeSet($meta, $entity); } } private function calculateFields(Timesheet $entity, array $changes = []): void { if ($this->sorted === null) { $this->sorted = []; foreach ($this->calculators as $calculator) { $i = 0; $prio = $calculator->getPriority(); do { $key = $prio + $i++; } while (\array_key_exists($key, $this->sorted)); $this->sorted[$key] = $calculator; } ksort($this->sorted); } foreach ($this->sorted as $calculator) { $calculator->calculate($entity, $changes); } } }