PreFlush / OnFlush / PostFlush Symfony Doctrine

851 Views Asked by At

How can we edit manually final SQL query before execution in Symfony / Doctrine?

I need to change value MANUALLY in SQL, i know i can edit it postPersist in entity, but i'm in a special case that this solution is not working in my schema .

A small idea :

public function preFlush/onFlush/PostFlush((PreFlushEventArgs/.../...)  $eventArgs) {
    $em = $eventArgs->getEntityManager();
    $uow = $em->getUnitOfWork();

    foreach ($uow->getScheduledEntityInsertions() as $entity) {

        if($entity instanceof MyEntity) {
              //Change my value directly in SQL query

        }

    }

}
1

There are 1 best solutions below

0
Artem On
public function getSubscribedEvents(): array
{
    return [
        Events::preUpdate  => 'preUpdate',
    ];
}

public function preUpdate(LifecycleEventArgs $args): void
{
    $object = $args->getObject();

    if ($object instanceof MyEntity) {
        $object->setSomething('something');

        $meta = $args->getObjectManager()->getClassMetadata(MyEntity::class);
        $om->getUnitOfWork()->recomputeSingleEntityChangeSet($meta, $object);
    }
}