Laravel控制器中乘法计算结果无法正确存入SQL数据库问题
问题分析与修复:Laravel购物车价格计算错误
你的代码存在两个核心问题,直接导致价格计算逻辑失效:
1. 条件判断误用赋值运算符
你写的 if($product-> discount_price=!null) 是赋值操作,而非比较判断:
- 这段代码会把
!null(即布尔值true)强行赋值给$product->discount_price,完全跳过了原本的判断逻辑 - 同时属性名中间的空格(
discount_price前的空格)会导致PHP解析异常
2. 变量名格式错误
$product-> discount_price 中的空格是非法的,正确的属性调用应该是 $product->discount_price(无空格)
修复后的完整代码
public function add_cart(Request $request, $id){ if(Auth::id()){ $user = Auth::user(); // 商品不存在直接抛出404,避免后续报错 $product = Product::findOrFail($id); $cart = new Cart; $cart->name = $user->name; $cart->email = $user->email; $cart->phone = $user->phone; $cart->address = $user->address; $cart->user_id = $user->id; $cart->product_id = $product->id; $cart->product_title = $product->title; $cart->quantity = $request->quantity; // 正确判断折扣价是否存在 if(!is_null($product->discount_price)){ $cart->price = $product->discount_price * $request->quantity; } else { $cart->price = $product->price * $request->quantity; } $cart->image = $product->image; $cart->save(); return redirect()->back(); } else { return redirect('login'); } }
额外优化建议
- 模型类名规范:Laravel模型类名需首字母大写(如
Product、Cart),符合PSR-4自动加载标准 - 简化条件逻辑:可以用三元运算符压缩价格计算代码:
$cart->price = (!is_null($product->discount_price) ? $product->discount_price : $product->price) * $request->quantity; - 请求参数验证:添加数量校验,防止非法值传入:
$request->validate([ 'quantity' => 'required|integer|min:1' ]);
内容的提问来源于stack exchange,提问作者Mohammad Marxan
相关产品推荐
相关产品推荐

