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

Laravel8删除指定数据库记录时始终误删第一条记录的问题求助

Laravel 8 删除操作始终删除第一条记录问题排查

问题现象

使用Laravel 8开发时,执行指定id的数据库记录删除操作,始终删除数据表中第一条记录,无法命中目标记录。

根因分析

核心问题出在前端表单与JS交互逻辑:

  • 循环渲染的所有删除表单都设置了相同的name="myForm"属性
  • JS逻辑中通过document.forms["myForm"]获取表单时,永远会匹配到页面中第一个同名表单,无论点击哪个删除按钮,提交的都是第一个表单内存储的id(即第一条记录的id),因此永远删除第一条数据
  • 额外逻辑瑕疵:原代码中存储room_id的输入框为text类型,会在页面直接展示id值,不符合交互逻辑;控制器删除顺序为先删主记录再删关联记录,存在主记录删除成功但关联记录删除失败产生脏数据的风险。

修正代码

1. 视图层(Blade模板)

移除表单固定name属性,点击按钮时将当前表单实例传入JS方法,同时将id输入框改为隐藏域:

@foreach ($rooms as  $value)                           
    <form action="{{route('room.destroy')}}" method="POST">
        @csrf
        <input type="hidden" value="{{$value->id}}" name="room_id">
        <button type="submit" class="btn bg-primary-light px-3 me-2 py-2" onclick="roomFunction(event, this.form)">
            <i class='bx bx-trash'></i>
        </button>
    </form>
@endforeach

2. 前端JS逻辑

接收传入的事件对象和当前表单实例,不再全局查询固定name的表单:

function roomFunction(event, form) {
    event.preventDefault(); // 阻止默认表单提交
    swal({
        title: "Are you sure?",
        text: "You won't be able to revert this!",
        type: "warning",
        showCancelButton: true,
        confirmButtonColor: "#4fa7f3",
        confirmButtonText: "Yes, delete it!",
        cancelButtonText: "No, cancel please!",
        closeOnConfirm: false,
        closeOnCancel: false
    },
    function(isConfirm){
        if (isConfirm) {
            form.submit();
        } else {
            swal("Cancelled", "", "error");
        }
    });
}

3. 控制器层(优化,可选)

增加参数校验,使用数据库事务保证数据一致性,调整删除顺序为先删关联数据再删主记录:

public function destroy(Request $request)
{   
    $request->validate([
        'room_id' => 'required|integer|exists:rooms,id'
    ]);

    $room = Room::find($request->room_id);

    \DB::transaction(function () use ($room) {
        RoomDetail::where('room_id', $room->id)->delete();
        $room->delete();
    });

    return redirect()->route('room');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:45:33