paulfcdd
@paulfcdd
PHP/Sf/WEB developer

Как правильно сделать rollBack транзакции Doctrine?

У меня есть код, который вставляет данные в несколько таблиц по очереди, который выглядит так:
$em->getConnection()->beginTransaction();

                try {
                    $em->flush();

                    try {
                        /** @var \AppBundle\Entity\Warehouse $warehouse */
                        $warehouse = $this->warehouseRepository->getRepository()->findOneBy([
                            'boxType' => $boxType,
                            'status' => Warehouse::STATUS_FREE
                        ]);

                        $oldStatus = $warehouse->getStatus();
                        $warehouse->setStatus(Warehouse::STATUS_BUSY);

                        $this->warehouseStatusManager->change($warehouse, $oldStatus);
                        $em->flush();

                        try {
                            $order = new Order();
                            $order->setUser($this->getUser());
                            $order->addWarehouse($warehouse);
                            $order->setRentFrom(\DateTime::createFromFormat('d/m/Y', $formData['rentFrom']));

                            $em->persist($order);
                            $em->flush();
                            $em->getConnection()->commit();
                            return Response::create('ok');
                        } catch (\Exception $exception) {
                            return Response::create('Can not save order. Aborted');
                        }
                    } catch (\Exception $exception) {
                        return Response::create('Can not proceed warehouse data');
                    }
                } catch (\Exception $exception) {
                    $em->getConnection()->rollBack();
                    return Response::create('Can not save address');
                }


вопрос в том, нужно ли мне выполнять метод `$em->getConnection()->rollBack();` в каждом блоке трай-кетч или хватит того, как я сделал?
  • Вопрос задан
  • 380 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы