РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
18 of 258 menu

Метод beginTransaction

Метод beginTransaction класса EntityManager запускает новую транзакцию базы данных. После вызова все последующие операции с базой данных выполняются в рамках этой транзакции и не применяются окончательно до вызова метода commit. Если во время выполнения произошла ошибка, транзакцию можно откатить методом rollback. Параметров метод не принимает.

Синтаксис

$em->beginTransaction();

Пример

Давайте начнём транзакцию, сохраним сущность и зафиксируем изменения:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function index(EntityManagerInterface $em): Response { $article = new Article(); $article->setTitle('article'); $em->beginTransaction(); try { $em->persist($article); $em->flush(); $em->commit(); } catch (\Throwable $e) { $em->rollback(); throw $e; } return new Response('saved'); } } ?>

Результат выполнения кода:

saved

Пример

Давайте откатим транзакцию при возникновении ошибки:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function index(EntityManagerInterface $em): Response { $em->beginTransaction(); try { $article = new Article(); $article->setTitle('abcde'); $em->persist($article); $em->flush(); throw new \RuntimeException('error'); $em->commit(); } catch (\Throwable $e) { $em->rollback(); return new Response('rolled back'); } return new Response('saved'); } } ?>

Результат выполнения кода:

"rolled back"

Смотрите также

  • класс EntityManager,
    который управляет сущностями и транзакциями
  • метод commit,
    который фиксирует текущую транзакцию
  • метод rollback,
    который откатывает текущую транзакцию
  • метод wrapInTransaction,
    который выполняет код внутри транзакции
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить