php - 如何只提交 PHP 事务的一部分?

标签 php mysql laravel pdo

我需要想法来解决需要更新订单并为此订单创建付款的问题。但如果订单收费失败。对订单所做的更新应撤消,但对其创建的费用应保留。

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/

相关文章:

php - 如果定义了 GET 参数,则自动规范标记

jquery - 导入工具 Excel CSV

php - Laravel Eloquent 限制每个用户的结果 - 日期组合

php - Laravel 中的存储文件夹

mysql - 难以获取前 3 名学生的详细信息 谁迟到了

php - jQuery 不能在 AJAX 加载的 DIV 中工作

javascript - 使用 php session 时出错

php - Laravel 查询

MySQL 当年每月平均计数(包括没有数据的月份)

arrays - Laravel 验证输入数组