如果发生异常,PHP / Laravel中是否有一种方法可以撤消服务器步骤?我知道DB::transaction(function()...
,但是在使用外部库的情况下不起作用...
在我的情况下,我正在使用Stripe:
1。)创建一个Source
2。)创建一个Customer
3。)将Source
附加到Customer
4。)为Subscription
Customer
但是如果Stripe有外部异常,例如在最后一步,我希望不执行其他三个步骤,而是返回一条错误消息。
注意:我正在使用Laravel中的异常处理程序来catch
异常。
如果有办法解决这个问题,我会很高兴的:-)
它与可能的重复项不同,因为如果发生异常,我想撤消几个步骤
答案 0 :(得分:1)
您可以像这样手动使用数据库事务:
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(具体请参见最后的手动交易部分)