无法添加商品至购物车:报错Trying to get property 'products' of non-object
商品添加购物车报错分析
报错信息
Trying to get property 'products' of non-object
触发报错的代码行
if ($order->products->contains($productId))
完整代码片段(来自BasketController.php)
public function basketAdd($productId) { $orderId = session('orderId'); if (is_null($orderId)) { $order = Order::create(); session(['orderId' => $order->id]); } else { $order = Order::find($orderId); } if ($order->products->contains($productId)) { $pivotRow = $order->products()->where('product_id', $productId)->first()->pivot; $pivotRow->count++; $pivotRow->update(); } else
问题原因
当session中存在orderId但Order::find($orderId)未找到对应数据库记录时,$order变量会被赋值为null,此时直接访问$order->products就会触发上述报错。
修复方案
在使用$order前增加空值校验,同时处理无效orderId的情况,重新创建订单并更新session:
public function basketAdd($productId) { $orderId = session('orderId'); $order = !is_null($orderId) ? Order::find($orderId) : null; // 订单不存在则重新创建并更新session if (is_null($order)) { $order = Order::create(); session(['orderId' => $order->id]); } if ($order->products->contains($productId)) { $pivotRow = $order->products()->where('product_id', $productId)->first()->pivot; $pivotRow->count++; $pivotRow->update(); } else { // 补充添加新商品到订单的逻辑 $order->products()->attach($productId, ['count' => 1]); } }
内容的提问来源于stack exchange,提问作者ivaaan
相关产品推荐
相关产品推荐

