我需要想法来解决需要更新订单并为此订单创建付款的问题。但如果订单收费失败。对订单所做的更新应撤消,但对其创建的费用应保留。
Controller 代码示例:
$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/