【问题标题】:Show checkbox checked from database in laravel在 laravel 中显示从数据库中选中的复选框
【发布时间】:2017-10-03 16:50:50
【问题描述】:

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

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-&gt;permissions-&gt;id == $permission-&gt;id ? 'checked' : '' }}

这会引发错误:

Property [id] does not exist on this collection instance

当我做{{dd($role-&gt;permissions)}}时:给出以下输出:

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

【问题讨论】:

  • 你能回显“
    ”吗? print_r($role->permissions);并显示
  • 您正在尝试检查集合是否等于 int。 $role-&gt;permissions 是一个集合。尝试编辑您的帖子,同时包含您的控制器。
  • @Classified 我已经用我的控制器的代码更新了这个问题。

标签: php laravel laravel-5.4 blade


【解决方案1】:

最简单的方法是使用包含签入集合

@if($role-&gt;permissions-&gt;contains($permission-&gt;id)) checked=checked @endif

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

【讨论】:

    【解决方案2】:

    您的代码将无法工作,因为您试图将数组与字符串进行比较,这是不可能的。您可以使用 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>
    

    希望这会有所帮助:)

    【讨论】:

    • Vikash 与您的代码 sn-p。我收到错误 in_array() expects parameter 2 to be array, object given
    • 通过在 pluck 方法的末尾附加 toArray() 方法解决了这个问题。感谢您纠正我。
    【解决方案3】:

    另一个简短的方法。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-10
      • 2021-08-03
      • 2016-09-05
      • 2016-02-23
      • 2019-03-06
      • 1970-01-01
      • 2014-05-20
      • 2017-02-07
      相关资源
      最近更新 更多