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

Метод 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,
    который обновляет записи в базе данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить