Laravel 8使用PUT方法更新数据无报错无变化如何解决
问题原因及解决方案
原因1:资源路由参数与控制器注入参数不匹配
Laravel 资源路由会根据路由前缀自动生成参数名,你定义的路由为Route::resource('index', TaskController::class),生成的更新路由参数为{index},而控制器update方法中注入的参数是Task $task,参数名不一致导致隐式模型注入失效,此时$task是未关联任何数据库记录的空模型实例,调用update方法自然不会修改数据。
解决方案(二选一即可)
- 修改控制器参数名,和路由生成的参数保持一致:
// TaskController.php public function update(Request $request, Task $index) { // 原有逻辑不变 }
- 显式指定资源路由的参数名,匹配控制器注入参数:
// web.php Route::resource('index', TaskController::class)->parameters([ 'index' => 'task' ]);
原因2:Task模型未开启content字段的批量赋值权限
Laravel 默认会静默过滤未在模型$fillable属性中声明的字段,你直接调用$task->update($request->all())时,如果content字段没有加入$fillable,赋值操作会被跳过,不会抛出报错。
解决方案
在app/Models/Task.php中添加content字段到批量赋值白名单:
// Task 模型类内添加 protected $fillable = ['content'];
内容的提问来源于stack exchange,提问作者Takichee
相关产品推荐
相关产品推荐

