Как уже упоминали другие люди, у вас есть ошибки в атрибутах name
и id
для флажков, так как в настоящее время они всегда будут одинаковыми.Однако здесь есть еще более зловещая проблема.
$checked = '';
foreach (Role::all() as $roles1) {
if (in_array($roles1, (array)$userRoles)) {
$checked = 'checked="checked"';
}
$roleNames .= $roles1->role != null ? $roles1->role . ' ' . '<input type="checkbox" ' . $checked . ' name="role" value="' . $roles1->id . '" class="checkbox" id="checkboxId">' . ' ' : '';
}
Этот блок кода перебирает все роли и обновляет переменную $checked
строкой, если у пользователя есть роль.Проблема в том, что $checked
переменная вне цикла.Таким образом, если на первой итерации он проходит проверку на истинность, он обновляет переменную до строки 'checked = "checked"', но если все остальные роли не проходят, они не изменяют переменную обратно на пустую, поэтому все проверкифлажки были бы отмечены.
Не зная, какова структура ролей json, это примерно настолько хорошо, насколько я могу комментировать.