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

Laravel 5.5报错:Method update不存在,编辑博客文章更新数据库遇问题

解决Laravel中BadMethodCallException: Method update does not exist错误

嗨,我来帮你排查这个问题!你遇到的错误核心原因是重复查询模型实例导致的对象异常,咱们一步步拆解:

错误原因分析

你在update方法里已经通过路由模型绑定自动注入了$post这个有效的Post模型实例,但又额外调用了Post::Find($post)——Find方法需要传入主键值(比如文章id),而不是模型对象本身。这会导致查询结果不符合预期(可能返回null或者无效对象),当你尝试在这个异常对象上调用update方法时,自然就抛出了"方法不存在"的错误。

修正后的代码

直接使用路由模型绑定注入的$post实例即可,不需要额外查询:

public function update(Request $request, Post $post) {
    // 直接用注入的模型实例调用update
    $post->update($request->all());
    
    // 可选:添加更新后的响应逻辑,比如重定向到文章详情页
    return redirect()->route('posts.show', $post)->with('success', '文章更新成功');
}

额外注意事项

  • 确保路由配置正确:你的更新路由需要使用正确的HTTP方法(PUT/PATCH)和参数,比如:
    Route::put('/posts/{post}', [PostController::class, 'update']);
    
    这样Laravel才能完成路由模型绑定,自动把对应id的Post实例注入到方法中。
  • 安全处理请求数据:尽量避免直接使用$request->all(),防止恶意提交未授权字段。可以指定允许更新的字段:
    $post->update($request->only(['title', 'content']));
    
    同时要在Post模型中设置$fillable属性,声明可批量赋值的字段:
    class Post extends Model {
        protected $fillable = ['title', 'content'];
    }
    
  • 检查模型继承关系:确认你的Post模型正确继承了Laravel的基础模型类:
    use Illuminate\Database\Eloquent\Model;
    
    class Post extends Model {
        // ...
    }
    

内容的提问来源于stack exchange,提问作者Dércio Lichucha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:55:07