Laravel中Oil数据更新功能失效问题排查与修复请求
问题修复方案
1. 修正路由定义错误
你的update路由在prefix('oil')的分组里重复添加了/oil/{id},导致最终路由路径变为/oil/oil/{id},和表单生成的URL不匹配,请求无法正确命中update方法。修改路由如下:
Route::controller(OilController::class)->prefix('oil')->group(function () { Route::get('', 'index')->name('oil'); Route::get('show/{id}', 'show')->name('oil.show'); Route::get('/{id}/edit', [OilController::class, 'edit'])->name('oil.edit'); // 移除重复的/oil前缀,直接定义/{id} Route::put('/{id}', [OilController::class, 'update'])->name('oil.update'); Route::delete('destroy/{id}', 'destroy')->name('oil.destroy'); });
2. 修正控制器update方法的查询逻辑
当前代码用$request->id查询数据,但表单未提交id字段,导致无法找到对应Oil记录,更新操作失效。改为使用路由参数$id查询:
public function update(Request $request, $id) { $validatedData = $request->validate([ // 原有验证规则保持不变 ]); // 使用路由参数$id获取对应记录 $oil = Oil::findOrFail($id); $oil->update($validatedData); // 跳转至列表页(对应name为oil的路由) return redirect()->route('oil')->with('success', 'Oil details updated successfully'); }
3. 修正跳转目标
你原本跳转的oil.show路由需要{id}参数,且为详情页,并非预期的列表页。改为跳转到列表页路由oil即可实现需求。
额外优化建议
- 表单添加错误提示,方便用户定位验证问题:
<input type="text" name="{{ $column }}" value="{{ $oil->{$column} }}" class="form-control @error($column) is-invalid @enderror"> @error($column) <div class="invalid-feedback">{{ $message }}</div> @enderror - 动态生成验证规则,减少重复代码:
$rules = []; $columns = Schema::getColumnListing('condem'); $columns = array_diff($columns, ['condemID', 'modelID']); foreach ($columns as $col) { if (str_ends_with($col, ['min', 'max', 'border', 'per'])) { $rules[$col] = 'required|numeric'; } elseif (str_ends_with($col, 'ket')) { $rules[$col] = 'required|string'; } } $validatedData = $request->validate($rules);
内容的提问来源于stack exchange,提问作者arthurr
相关产品推荐
相关产品推荐

