Метод rollBack
Метод rollBack класса DB применяется для отката текущей транзакции базы данных. Он отменяет все изменения, выполненные в рамках транзакции, и возвращает соединение к состоянию до начала транзакции. Метод полезен при возникновении ошибок или когда необходимо отменить изменения по логике приложения.
Синтаксис
<?php
DB::rollBack();
?>
Метод rollBack не принимает параметров и возвращает void.
Пример
Давайте создадим транзакцию, выполним несколько вставок и откатим их:
<?php
use Illuminate\Support\Facades\DB;
DB::beginTransaction();
DB::table('users')->insert([
['name' => 'John', 'email' => 'john@example.com'],
['name' => 'Jane', 'email' => 'jane@example.com']
]);
DB::rollBack();
$users = DB::table('users')->get();
echo $users->count();
?>
Результат выполнения кода:
"0"
Как видите, количество пользователей осталось прежним, так как вставка была отменена методом rollBack.
Пример
Давайте используем метод rollBack внутри обработчика ошибок для отката изменений в случае исключения:
<?php
use Illuminate\Support\Facades\DB;
try {
DB::beginTransaction();
DB::table('posts')->insert([
'title' => 'New Post',
'body' => 'Post content'
]);
if (rand(0, 1) === 0) {
throw new Exception('Random error occurred');
}
DB::commit();
} catch (Exception $e) {
DB::rollBack();
echo $e->getMessage();
}
?>
Результат выполнения кода при возникновении ошибки:
"Random error occurred"
При возникновении исключения все изменения в базе данных будут отменены, и сообщение об ошибке будет выведено.
Пример
Давайте создадим вложенные транзакции и откатим только вложенную:
<?php
use Illuminate\Support\Facades\DB;
DB::beginTransaction();
DB::table('categories')->insert([
'name' => 'Main Category'
]);
DB::beginTransaction();
DB::table('categories')->insert([
'name' => 'Sub Category'
]);
DB::rollBack();
DB::commit();
$categories = DB::table('categories')->pluck('name');
echo $categories;
?>
Результат выполнения кода:
["Main Category"]
Вложенная транзакция была откачена, поэтому в базе осталась только основная категория.
Смотрите также
-
метод
beginTransaction,
который начинает новую транзакцию базы данных -
метод
commit,
который фиксирует текущую транзакцию базы данных -
метод
transaction,
который выполняет callback в рамках транзакции -
метод
update,
который обновляет записи в базе данных