Сырой запрос транзакции
Для выполнения набора запросов внутри одной транзакции предназначен метод 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();