Laravel控制器中带AND子句的SQL查询:条件判断问题排查
Laravel购物车记录判断问题修复
错误原因分析
- where条件语法错误:原代码把两个查询条件用
and塞进同一个where方法里,这不符合Laravel查询构造器的语法。where单次只能处理一组键值对条件,多条件得用链式调用或者数组形式传递。 - 判断逻辑错误:
Cart::where(...)返回的是QueryBuilder查询构造器对象,永远不会等于null,导致原if条件永远不成立,创建新记录的逻辑根本不会执行。
修正后的代码示例
方式1:用exists()直接判断记录是否存在(推荐,查询效率更高)
$user_id = Auth::id(); // 检查是否存在同一product_id和user_id的购物车记录 if (!Cart::where('product_id', $product->id)->where('user_id', $user_id)->exists()) { $cart = new Cart; $cart->product_id = $product->id; $cart->quantity = $request->get('quantity'); $cart->user()->associate(Auth::user()); $cart->save(); } else { // 这里可以加记录存在时的逻辑,比如更新商品数量 // 示例:$existingCart = Cart::where('product_id', $product->id)->where('user_id', $user_id)->first(); // $existingCart->quantity += $request->get('quantity'); // $existingCart->save(); }
方式2:用first()获取实例再判断
$user_id = Auth::id(); $existingCart = Cart::where([ 'product_id' => $product->id, 'user_id' => $user_id ])->first(); if (!$existingCart) { $cart = new Cart; $cart->product_id = $product->id; $cart->quantity = $request->get('quantity'); $cart->user()->associate(Auth::user()); $cart->save(); } else { // 已有记录时的处理逻辑 }
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

