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

Laravel中如何通过分类名称关联外键ID插入数据

解决方案

方法一:前端传递分类ID至创建接口

  1. 前端调用getIdOfCategoryByName接口获取分类ID后,将该ID与其他表单字段(如title、description等)一起作为请求参数,发送到createcase接口。
  2. 修正后端createcase方法的参数注入问题,并完善字段映射:
public function createcase(Request $request){
    $request->validate([
        'title' => 'required',
        'description' => 'required',
        'caseTypeId' => 'required|exists:case_type,id', // 验证ID有效且存在于case_type表
        'amountreceived' => 'required',
        'amoutneeded' =>'required',
        'uid' => 'required',
        'visible' => 'required',
        'image' => 'required',
        'cityId' => 'required'
    ]);

    // 将前端传递的caseTypeId映射为case表对应的case_type_id字段
    $data = $request->post();
    $data['case_type_id'] = $data['caseTypeId'];
    unset($data['caseTypeId']);

    waitingdonations::create($data);
    return response()->json([
        'message' => 'waiting donation successfull',
    ]); 
}

同时修正getIdOfCategoryByName方法,确保返回单个ID而非集合:

public function getIdOfCategoryByName(Request $request){
    $name = $request->input('name');
    // 直接获取匹配的分类ID,无匹配则返回null
    $categoryId = case_type::where('category', $name)->value('id');
    return response()->json(['caseTypeId' => $categoryId]);
}

方法二:后端直接处理分类名称转ID(更简洁)

无需单独调用getIdOfCategoryByName接口,前端直接传递分类名称到createcase,后端内部完成ID查询:

  1. 修改createcase的验证规则与逻辑:
public function createcase(Request $request){
    $request->validate([
        'title' => 'required',
        'description' => 'required',
        'categoryName' => 'required|exists:case_type,category', // 验证分类名称存在
        'amountreceived' => 'required',
        'amoutneeded' =>'required',
        'uid' => 'required',
        'visible' => 'required',
        'image' => 'required',
        'cityId' => 'required'
    ]);

    // 根据名称查询分类ID
    $categoryId = case_type::where('category', $request->categoryName)->value('id');

    // 组装插入数据,移除冗余的分类名称字段
    $data = $request->except('categoryName');
    $data['case_type_id'] = $categoryId;

    waitingdonations::create($data);
    return response()->json([
        'message' => 'waiting donation successfull',
    ]); 
}
  1. 前端只需将用户选择的分类名称作为categoryName字段,与其他表单数据一起提交即可。

关键注意点

  • 无论哪种方法,都要添加存在性验证(exists规则),避免插入无效的分类ID或名称。
  • 使用value('id')替代get('id'):前者直接返回单个ID值,后者返回包含ID的集合,会导致插入失败。
  • 确保waitingdonations模型的$fillable属性包含case_type_id字段,否则create方法无法完成批量赋值。

内容的提问来源于stack exchange,提问作者aliana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:35:17