Один из способов использовать транзакции в Laravel:
DB::beginTransaction();
// великолепный полезный код
DB::commit();
Но вот интересно что произойдет:
1) Например, если код не дойдет до DB::commit();.
DB::beginTransaction();
// начало великолепного и полезного кода
Exeption или упаси бог Fatal Error где-то в процессе
//конец
DB::commit();
(Exeption еще можно поймать, что делать с Fatal Error и что происходит после такого с БД?)
2) Если где-то в процессе снова будет вызван DB::beginTransaction() - DB::commit()...
DB::beginTransaction();
// начало великолепного и полезного кода
//вызов восхитительной ф-ции, внутри которой тоже вызывается DB::beginTransaction(),
//а потом DB::commit()
func(...);
//конец
DB::commit();
2.1) Какое поведение при повторном вызове DB::beginTransaction()?
2.2) Если DB::beginTransaction() ничего не меняет, что случится при вызове DB::commit()? Вся транзакция пох... закончится, не дождавшись DB::commit(), который как ожидает неосведомленный автор действительно завершит транзакцию?
3) (похож на 1) Если DB::commit(); вообще никто вызывать и не собирался?
P.S. (На упреждение)
Документацию Laravel по транзакциям смотрел. Нашёл там только как нужно использовать и ни словом про возникшие вопросы.
Про (вот такой) рекомендуемый способ использовать транзакции я знаю:
DB::beginTransaction();
try {
DB::insert(...);
//.....
DB::commit();
// all good
} catch (\Exception $e) {
DB::rollback();
// something went wrong
}
Интересует именно как они работают когда все пошло не "по плану" и какие последствия можно получить.