显示从laravel中的数据库检查的复选框

时间:2017-10-03 16:50:51

标签: php laravel laravel-5.4 blade

我在我的应用程序中使用Laratrust包进行ACL。我正在尝试使用复选框编辑角色(为角色分配权限)。并希望从数据库中检查已分配权限复选框状态。

RoleController.php

中的代码
    public function edit($id)
{
  $role = Role::where('id', $id)->with('permissions')->first();
  $permissions = Permission::all();
  return view('admin.manage.roles.edit')->withRole($role)->withPermissions($permissions);
}

下面是我尝试过的代码:

@foreach($permissions as $permission)
 <div class="checkbox checkbox-styled">
   <label>
    <input type="checkbox" name="permissions[]" value="{{$permission->id}}" 
    {{ $role->permissions->pluck('id') == $permission->id ? 'checked' : '' }}
    >
    <span>{{$permission->display_name}}  <em>({{$permission->description}})</em></span>
</label>
</div>
@endforeach

代码抛出错误 Object of class Illuminate\Support\Collection could not be converted to int

我曾尝试过:

{{ $role->permissions->id == $permission->id ? 'checked' : '' }}

抛出错误:

Property [id] does not exist on this collection instance

当我做{{dd($role->permissions)}}时:给出了以下输出:

enter image description here

enter image description here

如果有人能指出我在这里做的错误,我将非常感激。

3 个答案:

答案 0 :(得分:3)

您的代码无效,因为您尝试将数组与字符串进行比较,这是不可能的。您可以使用php in_array函数来检查您的权限是否存在于当前权限

我认为您正在尝试检查特定角色已存在的所有权限。如果我错了,请纠正我。

试试这个

<input type="checkbox" name="permissions[]" value="{{$permission->id}}" 
@if($role->permissions) @if(in_array($permission->id, $role->permissions->pluck('id')) checked @endif @endif>

希望这会有所帮助:)

答案 1 :(得分:0)

最简单的方法是使用contains

签入集合

@if($role->permissions->contains($permission->id)) checked=checked @endif

<input type="checkbox" name="permissions[]" value="{{$permission->id}}" 
{{ @if($role->permissions->contains($permission->id)) checked=checked @endif }}
>

答案 2 :(得分:0)

另一种简短的方法。

<input type="checkbox" name="permissions[]" value="{{ $permission->id }}" 
{{ $role->permissions->contains($permission->id) ? 'checked' : '' }}>