Транзакция, необходимость откатить не всё

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
LDN
Сообщения: 62
Зарегистрирован: 2014.07.28, 10:13

Транзакция, необходимость откатить не всё

Сообщение LDN »

Пример - упрощенный вариант из жизни.
$form->create() - создает сущность в БД: payment.
$paymentService->initPayment - отправляет запрос к сервису, логирует запрос и ответ в БД.

Получается три insert в БД, логирование запроса и ответа от сервиса не нужно откатывать в случае какой либо ошибки. В то же время, если возникает ошибка сущность payment в БД сохранять не надо.

Пока я пришел к тому, что необходимо отказаться от транзакции, и удалять сущность payment из БД, делая запрос.
Но этот способ мягко говоря не идеальный, потому что возможно количество операций в транзакции будет больше, и каждую сущность удалять будет всё сложнее.

Наверняка это довольно распространенная проблема.
Подскажите другие варианты решения.

Код: Выделить всё

$transaction = Yii::$app->getDb()->beginTransaction();
try {
       $payment = $form->create();

       if ($payment) {
            $result = $paymentService->initPayment($payment);

            if ($result) {
                $transaction->commit();

                return true;
            }
        }
} catch (\Exception $e) {
     $transaction->rollBack();

     throw $e;
}
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Транзакция, необходимость откатить не всё

Сообщение samdark »

Логируйте после отката транзакции.
Ответить