Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to show checkboxes as checked when values are set in the database in Laravel

I'm setting up entrust and trying to manage roles via an edit users page. I have pulled the list of available roles as well as the roles that the user is already assigned to and have them passed to the view as $roles and $assignedRoles.

The problem I'm having is getting the form to show the already assigned roles ($assignedRoles) as checked and the un-assigned roles (remainder of $roles) as not checked.

$roles looks like

    [{"id":1,"name":"Admin","created_at":"2014-09-15 14:26:24","updated_at":"2014-09-15 14:26:24"},{"id":2,"name":"Pastor","created_at":"2014-09-15 14:26:34","updated_at":"2014-09-15 14:26:34"},{"id":3,"name":"Elder","created_at":"2014-09-15 14:26:43","updated_at":"2014-09-15 14:26:43"},{"id":4,"name":"Ministry Leader","created_at":"2014-09-15 14:26:55","updated_at":"2014-09-15 14:26:55"}]

and $userRoles looks like

    [{"id":1,"name":"Admin","created_at":"2014-09-15 14:26:24","updated_at":"2014-09-15 14:26:24","pivot":{"user_id":1,"role_id":1}}]

I am iterating through the available roles in the view using

@foreach ($roles as $role)
    {{ Form::checkbox('role[]', $role->id) }}
    {{ Form::label('role', $role->name) }}<br>
@endforeach

My problem is that I do not know how I can make it so that when viewing the form it will show which roles are already set as per $userRoles (above).

like image 360
Railto Avatar asked Jan 09 '23 19:01

Railto


2 Answers

First you make an array with all data

<?php 
$all_data = array();
foreach($roles as $role){
     $all_data[] =  $role->id;
}
?>

Now you create checkbox

@foreach ($roles as $role)
    {{ Form::checkbox('role[]', $role->id, in_array($role->id, $all_data)) }}
    {{ Form::label('role', $role->name) }}<br>
@endforeach
like image 198
Nur Uddin Avatar answered Jan 26 '23 02:01

Nur Uddin


In Controller

    $user = User::find($id);
    $allRoles = Role::all();
    $assignedRoles  = $user->roles->pluck('id')->toArray();

In View

<div class="form-group row" id="assign_hostel_fees">
   <label for="inputEmail3" class="col-sm-3 control-label">Select Roles</label>
      <div class="col-sm-9">
          @foreach($allRoles as $role)
             <div class="form-check">
                 <label class="form-check-label">
                    <input class="form-check-input" type="checkbox" name="roles[]" value="{{$role->id}}" {{in_array($role->id,$assignedRoles)?'checked':''}}>
                    {{$role->name}}
                 </label>
             </div>
          @endforeach
       </div>
 </div>

like image 36
Sanaulla Avatar answered Jan 26 '23 03:01

Sanaulla