委托包并显示期望数组但接收对象的角色

时间:2017-06-07 08:25:32

标签: php laravel laravel-5.4

最近我开始学习Larave,但是从版本4.2开始。我跟随SO建议的其他用户转储v4.2并从5.4开始。所以我这样做了。

我已经安装了laravel 5.4。*和Entrust包并尝试构建简单的ACL cms。

到目前为止一切都很好,但是当我尝试Edit某个角色时我有错误

  

in_array()期望参数2为数组,给定对象

问题在于刀片:

@foreach($permission as $value)
    <label>{{ Form::checkbox('permission[]', $value->id, in_array($value->id, $rolePermissions) ? true : false, array('class' => 'name')) }}
    {{ $value->display_name }}</label>
    <br/>
@endforeach

这是控制器功能

 public function edit($id)
 {
     $role = Role::find($id);
     $permission = Permission::get();
     $rolePermissions = DB::table("permission_role")
                          ->where("permission_role.role_id",$id)
                          ->pluck('permission_role.permission_id','permission_role.permission_id');

     return view('roles.edit',compact('role','permission','rolePermissions'));
 }

一般来说,我知道错误意味着什么。这意味着查询返回集合 - 对象,但我无法理解如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

我想你想在集合对象上使用->toArray()

下面的文字超出了这个问题的范围。

您可以稍微修剪一下控制器。

 public function edit(Role $role) // in route file you want to do Get::route('roles/{role}/edit'...)
 {
     //role should have relation M-M so you can access "permissions" like $role->permissions

     return view('roles.edit')->withRole($role);
 }

如果遵循所有约定,则应按如下方式定义M-M关系:

public function permissions()
{
    return $this->belongsToMany(Permission::class, 'your pivot table', 'role_id', 'permission_id');
}