如何在Laravel 8资源控制器中使用模型类实现编辑、删除及查询单条数据
Laravel 8 资源控制器模型注入(隐式模型绑定)使用指南
你提到的方法内直接注入模型类的写法,是Laravel提供的隐式模型绑定特性,框架会自动根据路由参数查询对应模型实例,查询失败会直接返回404响应,不需要你手动通过ID查询。
前置配置要求
- 路由参数名必须和控制器方法内的模型形参名保持一致:
你使用资源路由Route::resource('foods', FoodController::class)时,框架自动生成的路由参数为{food},和你方法内的$food形参名完全匹配,不需要额外修改配置。
各方法具体实现
1. show 方法(查询单条数据)
注入的$food已经是对应ID的模型实例,直接返回即可:
public function show(Food $food) { // API场景直接返回JSON return response()->json($food); // Web渲染场景可直接传给视图 // return view('food.show', compact('food')); }
2. edit 方法(返回编辑页面,仅Web场景使用)
API场景不需要该方法,Web场景直接把$food传给编辑视图即可:
public function edit(Food $food) { return view('food.edit', compact('food')); }
3. update 方法(更新数据)
先校验请求参数,直接调用模型的update方法即可完成更新:
public function update(Request $request, Food $food) { // 校验请求参数,可替换为表单请求验证 $validated = $request->validate([ 'name' => 'required|string|max:255', 'price' => 'required|numeric|min:0', // 其他字段规则 ]); $food->update($validated); // 返回响应 return response()->json([ 'code' => 200, 'msg' => '更新成功', 'data' => $food ]); }
4. destroy 方法(删除数据)
直接调用模型的delete方法即可完成删除:
public function destroy(Food $food) { $food->delete(); return response()->json([ 'code' => 200, 'msg' => '删除成功' ]); }
扩展说明
如果需要用ID之外的字段做路由绑定(比如用slug字段),只需要在Food模型中重写getRouteKeyName方法即可:
// Food.php 模型内添加 public function getRouteKeyName() { return 'slug'; // 绑定的字段名 }
内容的提问来源于stack exchange,提问作者Jasmine Akter
相关产品推荐
相关产品推荐

