@MasterCopipaster

Как лучше поступить с откатом транзакций к БД в Laravel 5?

У меня в консольной команде есть класс, который работает примерно так:

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();
    }

Но насколько это правильно? Будет ли так работать? И как в моем случае поступить?
  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ответы на вопрос 1
JhaoDa
@JhaoDa
LaravelRUS Team
Но на сколько это правильно?
Это правильно.

будет ли так работать?
Проверь.

и как в моем случае поступить?
В твоём случае надо начать изучать основы, а не ларавел. Вопрос никакого отношения к ларавел не имеет.

P.S. С русским языком тоже не всё гладко.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы