У меня в консольной команде есть класс, который работает примерно так:
public function handle()
{
$this->fetchOne();
$this->fetchTwo();
$this->fetchEtc();
return Command::SUCCESS;
}
Каждый метод fetch содержит кучу кода, в котором есть обновление моделей типа saveOrFail() save() где-то создаются новые записи в БД где-то обновляются старые. Но вот беда в том что если в первых двух вызовах произошла трабла, мне надо откатить все что обновлялось в БД.
DB::beginTransaction();
try {
DB::insert(...);
DB::commit();
} catch (\Exception $e) {
DB::rollback();
}
Но все примеры отката транзакции свозятся к чему-то подобному:
DB::transaction(function()
{
DB::table('users')->update(['votes' => 1]);
DB::table('posts')->delete();
});
А как мне поступить когда у меня кусок кода. То есть я хочу сделать что-то вроде
DB::beginTransaction();
try {
$this->fetchOne();
$this->fetchTwo();
} catch (\Exception $e) {
DB::rollback();
}
Но насколько это правильно? Будет ли так работать? И как в моем случае поступить?