C
C
chelkaz2017-04-05 22:26:33
Laravel
chelkaz, 2017-04-05 22:26:33

Is the logic correct for dependent-writing models with data backtracking?

I have an event for saving several models, and if somewhere, something is not saved, then you need to cancel everything that was saved. In fact, this is one process, but the recording of dependent models. I wrote such logic with such code, I would like to hear an opinion whether I wrote it correctly from the point of view of experienced programmers.

public function handle(Add $new)
    {
// Начинаю транзакцию, в данном случае,
// Если что то не так, я могу откатить

        DB::beginTransaction();
// Ставлю флаг false для отката всего
        $success = false;
        try {
            $new_arr = $new->new;
            $loc_id = $new_arr['loc_id'];
// Записываю первую модель
            $Item = new Item;
            $Item->loc_id = $loc_id;
// Если записана иду к следующей
            if ($Item->save())
            {
                $Item_detail = new ItemDetail();
                $Item_detail->Item_id = $Item->id;
// Если записана иду к следующей
                if ($Item_detail->save())
                {
                    $count = DB::table('Items')->where('loc_id', $loc_id)->count();
                    $localities = DB::table('localities')->where('loc_id', $loc_id)->update(['c_Items' => $count]);
// Если записана, ставлю флаг true для пост записи всего
                    if ($localities)
                    {
                        $success = true;
                    }
                }
            }
        } catch (\Exception $e) {
            // Откат если что-то не так
            DB::rollback();
        }

        if ($success) {
// Если ОК, делаю запись всего что с верху
            DB::commit();
        }
        else
        {
// Откат если не ОК
            DB::rollback();
        }
    }

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question