如何仅提交部分事务PHP

如何仅提交部分事务PHP

我需要一些想法来解决需要更新订单并为此订单创建付款的问题。但是如果订单收费失败。对订单所做的更新应该被撤消,但是为订单创建的费用应继续存在。

控制器代码示例:

$order = Order::find(1);

DB::beginTransaction();

    try {

        $order->update(['status' => 1]);
        chargeOrder ($order);

    } catch (PaymentErrorException $e) {

        DB::rollback();
        throw $e;

    }
    catch (\Exception $e) {

        DB::rollback();
        throw $e;

    }


DB::commit();


进行订单计费的示例函数:

function chargeOrder( $order ) {

    $payments_service->charge($order);
    $order->payments()->create( new Payment() );

}


我需要的是,当PaymentErrorException发生时,仅应撤消$ order-> update(),但在chargeOrder函数中进行的更改应保留。

最佳答案

如果我正确理解了这个问题:

$order = Order::find(1);
$previousStatus = $order->status;

DB::beginTransaction();

    try {

        $order->update(['status' => 1]);
        chargeOrder ($order);

    } catch (PaymentErrorException $e) {

        $order->update(['status' => $previousStatus]);

    }
    catch (\Exception $e) {

        DB::rollback();
        throw $e;

    }

DB::commit();

关于php - 如何仅提交部分事务PHP?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55440031/

10-09 19:26