You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:24:00