Метод rollBack
Метод rollBack класса Connection откатывает
активную транзакцию, отменяя все SQL-запросы, выполненные
после вызова метода beginTransaction. Если транзакция
не была начата, метод выбрасывает исключение.
Параметров метод не принимает.
Синтаксис
public function rollBack(): bool
Пример
Давайте начнём транзакцию, вставим запись, а затем откатим изменения:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/rollback', name: 'article_rollback')]
public function rollback(): Response
{
$conn = $this->getDoctrine()->getConnection();
$conn->beginTransaction();
$conn->insert('article', ['title' => 'abcde']);
$conn->rollBack();
$res = $conn->fetchAllAssociative('SELECT * FROM article');
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
[]
Как видите, вставленная запись не сохранилась, так как транзакция была отменена.
Пример
Давайте начнём транзакцию, обновим запись и откатим изменения:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/rollback-update', name: 'article_rollback_update')]
public function rollbackUpdate(): Response
{
$conn = $this->getDoctrine()->getConnection();
$conn->beginTransaction();
$conn->update('article', ['title' => 'hello'], ['id' => 1]);
$conn->rollBack();
$res = $conn->fetchAssociative('SELECT * FROM article WHERE id = ?', [1]);
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
{"id": 1, "title": "article"}
Запись осталась в исходном состоянии, так как откат вернул её к значению до начала транзакции.
Смотрите также
-
класс
Connection,
который управляет соединением с базой данных -
метод
beginTransaction,
который начинает новую транзакцию -
метод
commit,
который фиксирует текущую транзакцию -
метод
isTransactionActive,
который проверяет активность транзакции