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
相关产品推荐
相关产品推荐

