Сырой запрос транзакции
Для выполнения набора запросов внутри одной транзакции предназначен метод transaction()
. Если в функции-замыкании произойдёт исключение, транзакция автоматически откатится. А если функция выполнится успешно, транзакция автоматически применится.
DB::transaction(function () {
DB::table('users')->update(['votes' => 1]);
DB::table('posts')->delete();
});
Метод transaction()
принимает второй необязательный аргумент, с помощью которого задаётся число повторных попыток транзакции при возникновении взаимной блокировки. После истечения этих попыток будет выброшено исключение:
DB::transaction(function () {
DB::table('users')->update(['votes' => 1]);
DB::table('posts')->delete();
}, 5);
Чтобы запустить транзакцию вручную и иметь полный контроль над её откатом и применением:
DB::beginTransaction();
Можно откатить транзакцию методом rollBack()
:
DB::rollBack();
Можно применить транзакцию методом commit()
:
DB::commit();