使用InertiaJS & Laravel删除数据库记录时遇错误,寻求帮助
Laravel 结合 InertiaJS 删除数据库记录报错
问题场景
点击删除按钮后出现404错误,无法正常删除数据库中的子记录。
相关代码
前端组件代码
链接按钮:
<Link class="trash" @click="submit(result.ChildID)"> Move to Trash </Link>
说明:ChildID为数据库中子记录的ID。
点击触发的方法:
methods: { submit: function (ChildID) { alert(ChildID) if (confirm("Are you sure you want to delete this child?")) { this.$inertia.delete('destroy/ChildID'); } }, },
Laravel路由代码
Route::delete('destroy/{childID}',[childrenController::class,'destroy']);
Laravel控制器代码
public function destroy(children $childID){ $childID->delete(); return redirect()->route('View_Child_Profile'); }
问题原因及解决方案
1. 前端请求URL硬编码(核心问题)
当前代码中this.$inertia.delete('destroy/ChildID');里的ChildID是字符串字面量,不是动态传入的变量,导致请求的URL是/destroy/ChildID而非/destroy/实际ID值,触发404错误。
修正方法:使用动态拼接URL,比如ES6模板字符串:
this.$inertia.delete(`destroy/${ChildID}`);
或者用字符串拼接:
this.$inertia.delete('destroy/' + ChildID);
2. 路由模型绑定检查
Laravel路由模型绑定要求路由参数名与控制器参数名一致,同时模型类需正确引入:
- 确保控制器顶部已引入对应的模型类,比如
use App\Models\Child;(通常模型类为单数首字母大写,而非复数children) - 控制器方法参数修正为与模型匹配的命名,比如:
public function destroy(Child $childID){ $childID->delete(); return redirect()->route('View_Child_Profile'); }
3. 路由访问路径确认
确保请求的URL前缀正确,比如如果路由是定义在web.php中且没有前缀,那么请求的URL应为/destroy/ID,如果有路由组前缀(如/admin),则需要在前端请求时加上对应前缀。
内容的提问来源于stack exchange,提问作者Muhammad Khan
相关产品推荐
相关产品推荐

