为了账号安全,请及时绑定邮箱和手机立即绑定

在 DB::transaction() 中返回 redirect->back()

在 DB::transaction() 中返回 redirect->back()

PHP
子衿沉夜 2021-10-22 14:28:39
我试图在DB::transaction方法中执行一些语句,但是当某个条件失败时应该出现问题return redirect()->back()但问题是代码既没有重定向回来也没有进一步执行。可能的原因是什么?  return DB::transaction(function ()  use ($request){             $sellerItem = new SellerItem();            $sellerItem->item_id = $request->item_id;            $sellerItem->unit_price = $request->unit_price;            $sellerItem->quantity = $request->quantity;            $sellerItem->paid_amount = $request->paid_amount;             $sellerItem->payment_method = $request->payment_method;            $sellerItem->seller_id = $request->seller_id;            $sellerItem->due = ($request->unit_price*$request->quantity) + $request->due - $sellerItem->paid_amount;         //   dd($sellerItem);            $sellerItem->before_due = $request->due; **Problem is in this block of statement**            if($sellerItem->due<0)            {            return redirect()->back()->with('success', "Paid amount can't be greater than ".abs(($request->unit_price*$request->quantity) + $request->due));             }            $sellerItem->save();            $item = Item::find($request->item_id);            $item->quantity = $item->quantity+$request->quantity;            $item->save();            return redirect('item/stock-in');              });
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

解决这个问题的一种方法是使用 Facade 而不是闭包。


例如,使用您的代码:


DB::beginTransaction();


$sellerItem = new SellerItem();

$sellerItem->item_id = $request->item_id;

$sellerItem->unit_price = $request->unit_price;

$sellerItem->quantity = $request->quantity;

$sellerItem->paid_amount = $request->paid_amount;


$sellerItem->payment_method = $request->payment_method;

$sellerItem->seller_id = $request->seller_id;


$sellerItem->due = ($request->unit_price * $request->quantity) + $request->due - $sellerItem->paid_amount;

$sellerItem->before_due = $request->due;

if ($sellerItem->due < 0) {

    DB::rollBack();

    return redirect()->back()->with('success',

        "Paid amount can't be greater than " . abs(($request->unit_price * $request->quantity) + $request->due));

}


$sellerItem->save();

$item = Item::find($request->item_id);

$item->quantity = $item->quantity + $request->quantity;

$item->save();


DB::commit();

return redirect('item/stock-in');


查看完整回答
反对 回复 2021-10-22
  • 1 回答
  • 0 关注
  • 270 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信