如果我调用DB::beginTransaction()
控制器但没有DB::rollBack()
先调用就重定向,我的 Flash 消息不会出现在新页面上。
例如,在购物车中,我开始交易,但在信用卡支付失败时重定向到支付页面。除非我先打电话,否则不会出现付款错误DB::rollBack()
。
这发生在 Laravel 5.7 和 5.8 上。
重现步骤:
这失败了:
DB::beginTransaction();
return redirect("/checkout/payment")->withInput($request->all())->withFlashDanger("Credit Card Number is required.");
这有效:
DB::beginTransaction();
DB::rollBack();
return redirect("/checkout/payment")->withInput($request->all())->withFlashDanger("Credit Card Number is required.");
我认为这是一个错误,因为文档中没有关于数据库事务和闪存消息之间的任何关联。我知道添加rollBack()
呼叫有效,但我不知道这是否是意图。
显然,调用rollBack()
是正确的做法,但我在编写代码时发现了这个问题。