Laravel Blade动态生成角色复选框出现重复内容如何解决
问题原因
你出现角色重复的核心问题是嵌套循环的逻辑错误:
- 外层循环遍历全部角色,内层又遍历当前用户已选的角色ID数组
$selRoles,每一个外层角色都会和内层所有已选ID逐一比对,每次比对都会输出一次该角色的复选框,如果用户有3个已选角色,每个角色就会重复输出3次,和你看到的重复现象完全匹配。 - 额外小问题:你当前的复选框
name属性为rol,没有加数组标识[],后续表单提交时只能拿到最后一个选中的角色ID,无法提交多个选中的角色。
修复后的Blade代码
删除内层循环,直接用in_array判断当前角色ID是否在已选数组中即可:
@foreach($roles as $rol) <div class="col-md-4"> <input type="checkbox" name="rol[]" @if(in_array($rol->id, $selRoles)) checked @endif class="form-check-input" value="{{ $rol->id }}" id="role-{{ $rol->id }}" > <label class="form-check-label" for="role-{{ $rol->id }}"> {{ $rol->name }} </label> </div> @endforeach
控制器代码优化建议
你控制器中$usuario->load('roles');是冗余代码,前面执行$usuario->roles->pluck('id')->toArray()的时候已经完成了角色关联的加载,这行可以直接删除。
内容的提问来源于stack exchange,提问作者scorpions78
相关产品推荐
相关产品推荐

