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)和参数,比如:
这样Laravel才能完成路由模型绑定,自动把对应id的Post实例注入到方法中。Route::put('/posts/{post}', [PostController::class, 'update']); - 安全处理请求数据:尽量避免直接使用
$request->all(),防止恶意提交未授权字段。可以指定允许更新的字段:
同时要在Post模型中设置$post->update($request->only(['title', 'content']));$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
相关产品推荐
相关产品推荐

