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(具体见文末手动交易部分)
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(具体见文末手动交易部分)