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

Laravel 9报错:Attempt to read property "id" on null,求解决方案

解决Laravel 9中「Attempt to read property "id" on null」报错

这个报错的核心原因是$user->plan返回了null——当前用户没有关联的套餐(Plan)记录,导致你试图读取null对象的id属性时触发错误。下面是几种可行的解决方法:

  • 检查模型关联是否正确
    先确认你的User模型中是否正确定义了与Plan的关联关系,比如如果是用户属于一个套餐,应该是:

    // app/Models/User.php
    public function plan()
    {
        return $this->belongsTo(Plan::class);
    }
    

    确保关联的外键设置正确,比如plans表的主键是id,users表有对应的plan_id字段。

  • 使用空安全操作符处理null情况
    如果你使用的是PHP 8+,可以直接用null安全操作符?->避免报错,当$user->plan为null时,表达式会返回null,和1比较结果为false,自动进入else分支:

    if($user->plan?->id == 1) {
        return view($this->activeTemplate . 'user.autopool', compact('pageTitle', 'commissions', 'deposit', 'transactions', 'commission', 'withdraw', 'transaction', 'username', 'balance', 'user', 'plans'));
    } else {
        return view($this->activeTemplate . 'user.nopool', compact('pageTitle', 'user'));
    }
    

    如果你用的是PHP 7.x,可以用Laravel提供的optional()辅助函数:

    if(optional($user->plan)->id == 1) {
        // 同上代码
    }
    
  • 先判断套餐是否存在再比较
    最直观的方式是先检查$user->plan是否不为null,再读取id属性:

    if($user->plan && $user->plan->id == 1) {
        // 同上代码
    } else {
        // 同上代码
    }
    
  • 从根源避免null(可选)
    如果业务逻辑要求每个用户必须有一个套餐,可以在创建用户时强制分配默认套餐,或者在数据库中给users表的plan_id字段设置默认值,同时添加外键约束,确保不会出现无关联套餐的用户。

内容的提问来源于stack exchange,提问作者Nitesh Yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:15:42