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

Laravel 8 Eloquent查询无评论时报Attempt to read property "id" on null

报错根源

报错核心是PostComments模型中与用户的关联关系定义错误:

  • 单条评论仅对应1个发布用户,属于从属关联,应当使用belongsTo定义,你当前误用了hasMany一对多关联
  • hasMany返回的是用户模型集合而非单个用户实例,当关联用户不存在、或者关联关系解析异常时,后续逻辑调用$comment->user->id就会触发「Attempt to read property "id" on null」错误,哪怕文章没有评论本身不会触发这个报错,报错本质是关联关系定义错误导致的属性读取异常。
修复方案
  1. 修正评论模型的user关联定义
    将原有错误的关联代码:
public function user(){
    return $this->hasMany(User::class,'id','user_id')->latest();
}

替换为正确的从属关联:

public function user(){
    // 关联逻辑:当前评论表的user_id字段,对应用户表的id字段
    return $this->belongsTo(User::class, 'user_id', 'id');
}

注意:单条模型关联不需要加->latest()排序方法,该方法仅对集合结果生效,写在单关联定义中会引发额外的查询逻辑异常。

  1. 极端场景兼容(可选)
    如果存在用户账号被删除、评论残留脏数据(user_id对应不存在的用户)的场景,可以在输出评论用户信息时用空安全操作符做兜底,避免再次触发同类报错:
// 模板输出示例
{{ $comment->user?->username ?? '匿名用户' }}

修正关联后,你原有写的评论查询逻辑不需要改动即可正常运行:

$comments=PostComments::with('user:id,username')
            ->where('post_id',$this->id)->latest()->get();

内容的提问来源于stack exchange,提问作者Nurideen Yahuza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:45:29