繁体   English   中英

如何只提交部分PHP事务?

[英]How to commit just part of transaction 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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM