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

Laravel添加博客评论功能出现Call to undefined method报错如何解决

问题原因

  • comments() 关联方法仅在 Blog 模型中定义,Comment 模型没有声明该方法,自然无法调用
  • 控制器逻辑错误:你需要为博文新增评论,却错误查询了 Comment 模型获取实例,再调用不存在的方法直接触发报错

修复步骤

1. 修正评论控制器代码

你需要先查询对应博文的 Blog 实例,再通过它的 comments 关联创建评论,建议同时补充输入校验,避免异常:

public function store(Request $request)
{
    // 输入校验,确保评论内容和对应博文id合法
    $request->validate([
        'comment_body' => 'required|string|max:1000',
        'blog_id' => 'required|exists:blogs,id'
    ]);

    $comment = new Comment();
    $comment->body = $request->get('comment_body');
    $comment->user()->associate($request->user());
    
    // 替换原有错误的Comment查询,改为查询Blog实例
    $blog = Blog::find($request->input('blog_id'));
    $blog->comments()->save($comment);

    return back();
}

2. 补充前端传参

前端提交评论的表单中需要新增隐藏字段blog_id,传入当前正在浏览的博文ID,确保控制器能找到对应的博文实例。

可选检查

如果修改后仍出现外键相关报错,可检查comments数据表是否存在blog_id字段,字段类型是否和blogs表的id字段一致。如果你的外键名不是默认的blog_id,需要在Blog模型的comments关联中手动指定外键:

public function comments()
{
    return $this->hasMany(Comment::class, '你的自定义外键名');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 17:09:03