Получение актуальных данных в Doctrine после обновления сущности через SQL запрос хранимой процедуры

Выполнял тут следующую задачу на проекте на Symfony. Нужно было реализовать хранимую процедуру в PostgreSQL, затем вызывать её и вернуть обновлённую сущность.

Выполнение хранимой процедуры выглядит так:

    $conn = $this->em->getConnection();
    $conn->beginTransaction();
    try {
	    $sql = "CALL fn_custom_storage_procedure(:arg1, :arg2, :arg3)";
	    $stmt = $conn->prepare($sql);
	    $stmt->execute([
	        ':arg1' => $entity->getArg1(),
	        ':arg2' => $entity->getArg2(),
	        ':arg3' => $entity->getArg3()
	    ]);
	    $conn->commit();
	} catch (ConnectionException $e) {
    	$conn->rollBack();
    }

Далее нужно вернуть обновлённую сущность.

    $entity = $this->em->getRepository(Entity::class)->findOneBy(['id' => 1]);

если просто вызвать таким образом, то в переменной $entity будут храниться ещё старые значения, хотя в базе уже будут храниться новые.

В этом случаем нужно воспользоваться методом refresh менеджера сущностей:

    $entity = $this->em->getRepository(Entity::class)->findOneBy(['id' => 1]);
    $this->em->refresh($entity);

после этого в $entity вернуться актуальные данные.

Полезные ссылки

Тэги:

Тэг в списке: