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

Laravel/Ajax编辑同group_id不同id行时获取错误行数据问题

编辑表单查询数据表时返回错误行记录

为解释标题所述问题,先展示我的数据表,表中存在多条group_id相同但id不同的记录
数据表

以下是页面对应的输出记录:我在名称旁添加了id用于展示取值
页面输出记录

我遇到的问题是:比如点击id=41、group_id=1的首行编辑按钮时,文本框展示的是id=1、group_id=1的记录值

下方是点击id=41行编辑按钮弹出的模态框截图,我额外添加了id和group_id的文本框,用于展示从表中获取的记录信息,可以看到返回的是id=1的行数据,相关代码如下。
模态框截图

路由代码

use App\Http\Controllers\Frontend\BBRCategoryConfigurationController;

Route::get('/bbr-group-configuration-edit/{id}', [BBRGroupConfigurationController::class,'edit']);

控制器代码

(数据从HmsBbrGroup模型获取)

public function edit($id) {
    $group_edit = HmsBbrGroup::find($id);
    if ($group_edit) 
    {
        return response()->json([
            'status'=>200,
            'group_edit'=>$group_edit,
        ]);
    }
    else
    {
        return response()->json([
            'status'=>404,
            'message'=>'Group Not Found',
        ]);
    }
}

Ajax代码

$(document).on('click','.edit_group',function (e) {
    e.preventDefault();
    $(".save_button").removeClass("add_group").addClass("update_group");
    var g_id = $(this).val();
    console.log(g_id);
    $('#group_form').modal('show');
    $.ajax({
        type: "GET",
        url: "/clinical/bbr-group-configuration-edit/"+g_id,
        success: function (response) {
             console.log(response);
            if(response.status == 404) {
                $('#success_message').html("");
                $('#success_message').addClass('alert alert-danger');
                $('#success_message').text('response.message');
            } else {
                $('#id').val(response.group_edit.id);
                $('#group_id').val(response.group_edit.group_id);
                $('#group_name').val(response.group_edit.group_name);
                $('#group_description').val(response.group_edit.group_description);

                $('#effective_start_datetime').val(response.group_edit.effective_start_datetime ? 'active' : 'inactive').change();
                $('#group_type_id').val(response.group_edit.group_type_id).change();
            }
        }
    });
});

表单代码

<input type="text" id="id" class="id">
<input type="text" id="group_id" class="group_id">
<input type="text" id="group_name" class="group_name" placeholder="Group Name">
<textarea id="group_description" class="group_description" placeholder="Group Description">
<select id="effective_start_datetime" class="effective_start_datetime">
<select id="effective_start_datetime" class="effective_start_datetime">

注意事项

  • 为了获取正确行数据,我将路由设置为按id查询:/bbr-group-configuration-edit/{id}
  • Ajax的逻辑是在else分支中将查询到的行数据填充到模态框的对应字段中,对应第三张截图的效果
  • 我猜测问题可能和控制器的$group_edit = HmsBbrGroup::find($id);逻辑有关,但无法理解为什么它会返回相同group_id下id最小的第一条记录

解决方案

按优先级逐一排查即可定位修复:

  1. 校验前端传参
    打开浏览器控制台,点击id=41对应行的编辑按钮,查看Ajax代码中console.log(g_id)的输出:

    • 输出为1:列表渲染时所有.edit_group编辑按钮的value属性错误绑定为第一行id,修改列表循环逻辑,给每个编辑按钮的value赋值为当前行的id即可。
    • 输出为41:问题出在后端逻辑,继续往下排查。
  2. 检查模型主键配置
    Laravel的find()方法默认按模型定义的主键查询,如果你在HmsBbrGroup模型中手动修改了主键为group_id(类似代码protected $primaryKey = 'group_id';),find(41)会按group_id=41查询,无匹配时就会返回同group_id下的首条记录。
    修复方法:确保HmsBbrGroup模型的主键配置为默认的id,或者直接将控制器查询逻辑改为显式按id查询:

$group_edit = HmsBbrGroup::where('id', $id)->first();
  1. 修复已知代码异常
    当前表单存在两个id均为effective_start_datetime的下拉框,DOM id重复会导致后续字段填充异常,删除重复的下拉框即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 06:30:02