Laravel - 在动态 table 的每一行内附加行 ID 以形成名称属性

Laravel - Append row id to form name attribute inside each row of a dynamic table

我向视图 $abilities$users 发送了两个变量。 $abilities 是一个键值对数组,包含以下格式的数据:

["1"=>"create_user","2"=>"delete_user","3"=>"ban_user"]

$users 是一个数组,格式如下:

["1"=>"John Doe","2"=>"Jane Doe"]

两者均取自各自的数据库abilities(列:ID、姓名)和users(列:ID、姓名)。

在视图中,我有一个 table,其中针对 $user->id:

的每一行包含多个 select
@foreach($users as $user)
<tr>
    <td>{{$user->id}}</td>
    <td>
       {{Form::select("takenabilities[]",$abilities, null, ['id'=>'system-abilities','multiple','class'=>'form-control' ])}}
   </td>
</tr>
@endforeach

问题是,当我在我的控制器中收到请求时,我只看到一个 takenabilities[] 数组,我想在动态生成的每一行中保存每个多个 select 的数据,如果说得通?

您不能使用同名的多个选择来做到这一点。最后一个的值覆盖所有先前选择的值。另外你最好给每个select分配不同的id。尝试向数组添加另一个级别:

@foreach($users as $user)
<tr>
    <td>{{$user->id}}</td>
    <td>
       {{Form::select("takenabilities[$user->id][]", $abilities, null, ['id'=>'system-abilities-' . $user->id,'multiple','class'=>'form-control' ])}}
   </td>
</tr>
@endforeach

在控制器中:

$takenabilities = [];
foreach(Request::input('takenabilities') as $userId => $userAbilities) {
    $takenabilities = array_merge($takenabilities, $userAbilities);
}
$takenabilities = array_unique($takenabilities);