如何仅提交部分事务PHP?

时间:2019-03-31 10:34:08

标签: php mysql laravel pdo

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

控制器代码示例:

$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函数内部进行的更改应保留。

1 个答案:

答案 0 :(得分:0)

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

$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();
相关问题