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

Laravel多用户表单复选框数据插入:如何获取单用户全选权限

问题描述

我有一个可添加多用户的表格表单,表单包含权限复选框。当前问题出在复选框数据处理上:用户1勾选了Add、Edit、Delete,用户2仅勾选了Add,但数据库中仅插入了单个权限值(如John Doe对应"Add",Jane Doe对应"Edit"),而预期是每个用户对应其所有勾选的权限数组。请问如何获取单用户行的所有勾选权限并正确插入数据库?

Blade HTML

<button type="button" id="addUser">Add</button>
<table id="userTable">
    <thead>
        <tr>
            <th></th>
            <th>Name</th>
            <th>Add</th> 
            <th>Edit</th> 
            <th>Delete</th> 
        </tr>
    </thead>
    <tbody>    
    </tbody>
</table>

JS 代码

$("#addUser").click(function () {
    // 获取当前表格行数作为用户唯一索引
    const rowIndex = $("#userTable tbody tr").length;
    t.row.add(['', 
        `<input class="form-control" type="text" name="fullname[${rowIndex}]">`,
        `<input class="form-control" type="checkbox" name="permissions[${rowIndex}][]" value="Add" data-parsley-multiple="status">`,
        `<input class="form-control" type="checkbox" name="permissions[${rowIndex}][]" value="Edit" data-parsley-multiple="status">`,
        `<input class="form-control" type="checkbox" name="permissions[${rowIndex}][]" value="Delete" data-parsley-multiple="status">`,
    ]).draw(false); 
});

原控制器代码

public function store(Request $request)
{
    foreach($request->fullname as $key=>$insert) 
    {   
        $user = [
            'fullname' => $request->fullname[$key],
            'permissions' => json_encode($request->permissions[$key]),
        ];

        DB::table('users')->insert($user);
    }
}

解决方案

1. 前端核心修改

原JS中所有权限复选框使用name="permissions[]"会将所有勾选权限合并为一个一维数组,无法区分归属用户。需要给每个用户行的表单元素添加唯一索引,让fullname和permissions的索引一一对应:

  • 新增行时,用当前表格行数作为索引(rowIndex)
  • 将fullname[]改为fullname[${rowIndex}],permissions[]改为permissions[${rowIndex}][]

提交后,后端$request->permissions会变成二维数组,每个索引对应一个用户的权限数组(如$request->permissions[0]是第一个用户的所有勾选权限)。

2. 后端优化(可选)

原控制器逻辑已适配修改后的前端数据,可增加空值处理避免未勾选权限时插入空JSON:

public function store(Request $request)
{
    foreach($request->fullname as $key => $name) 
    {   
        // 若用户未勾选任何权限,默认设为空数组
        $permissions = $request->permissions[$key] ?? [];
        
        $user = [
            'fullname' => $name,
            'permissions' => json_encode($permissions),
        ];

        DB::table('users')->insert($user);
    }
}

验证效果

当用户1勾选Add/Edit/Delete、用户2勾选Add时:

  • $request->fullname为['John Doe', 'Jane Doe']
  • $request->permissions为[['Add','Edit','Delete'], ['Add']]
  • 数据库中每个用户的permissions字段会存储对应权限数组的JSON字符串,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 09:54:18