You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法添加商品至购物车:报错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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 12:10:22