PHP: 发生异常则撤消

PHP: Undo if Exception occurs

PHP/Laravel 中是否有一种方法可以在发生异常时撤消几个步骤?我知道 DB::transaction(function()...,但在使用外部库的情况下它不起作用...

就我而言,我使用的是 Stripe:

1.) 创建一个 Source

2.) 创建一个 Customer

3.) 将 Source 附加到 Customer

4.) 为 Customer

创建一个 Subscription

但是如果有来自 Stripe 的外部异常,例如在最后一步,我希望其他三个步骤不执行,而是返回一条错误消息。

注意: 我正在使用从 Laravel 到 catch 异常的异常处理程序。

如果有办法解决这个问题,我会很高兴:-)


它不同于可能的重复,因为如果发生异常我想撤消几个步骤

您可以像这样手动使用数据库事务:

DB::beginTransaction();

// create your source, customer and attach them

// perform your api call and catch on exection

在您 api 的 catch 块中调用 运行 这个:

DB::rollBack();

如果 api 调用 运行 成功 运行 这个:

DB::commit();

https://laravel.com/docs/5.6/database#database-transactions(具体见文末手动交易部分)