src/EventSubscriber/PositionNormalizerSubscriber.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\PositionedInterface;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityDeletedEvent;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. class PositionNormalizerSubscriber implements EventSubscriberInterface
  8. {
  9.     public function __construct(
  10.         private EntityManagerInterface $entityManager,
  11.     )
  12.     {}
  13.     public static function getSubscribedEvents()
  14.     {
  15.         return [
  16.             AfterEntityDeletedEvent::class => [['onAfterEntityDeleted'0]],
  17.         ];
  18.     }
  19.     public function onAfterEntityDeleted(AfterEntityDeletedEvent $event)
  20.     {
  21.         $entity $event->getEntityInstance();
  22.         if ($entity instanceof PositionedInterface) {
  23.             // Re-normalize positions
  24.             $qb $this->entityManager->createQueryBuilder()
  25.                 ->update($entity::class, 'p')
  26.                 ->set('p.position''p.position - 1')
  27.                 ->where('p.position > :position')
  28.                 ->setParameter('position'$entity->getPosition());
  29.             $qb->getQuery()->execute();
  30.         }
  31.     }
  32. }