$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;
}