Laravel从模型中获取所有相关数据

时间:2017-01-11 13:54:49

标签: php laravel

我有2对多关系,并试图获取所有相关数据。 用户模型:

public function roles()
{
  return $this->belongsToMany('App\Role', 'user_role_pivot', 'user_id', 'role_id');
}

角色模型:

public function rolepermissions()
{
  return $this->belongsToMany('App\RolePermission', 'role_permissions_connect', 'role_id', 'role_perm_id');
}

我正在制定政策,希望从我的rolepermissions获取所有价值。

我的政策:

public function createrole(User $user)
{
    foreach ($user->roles as $role) {
        foreach ($role->rolepermissions as $permission) {
            return $permission->permission_name;
        }
    }
}

它只返回一个结果,但我想从角色权限中获取所有相关数据。

2 个答案:

答案 0 :(得分:2)

一旦函数命中return,它就会停止执行并返回结果。它与C#中的yield return不同,您可以在其中实际返回多个值。

无论如何,您可能希望将所有内容添加到数组中,然后使用您的数组执行操作,如下所示:

public function createrole(User $user) {
    $array = [];
    foreach ($user->roles as $role) {
        foreach ($role->rolepermissions as $permission) {
            array_push($array, $permission);
        }
    }

    dd($array); //add this line if you want to see your array's items

    foreach($item in $array){
        //do something
    }
}

现在我们仍在进行最佳实践,您也可以这样做:

foreach ($user->roles as $role) {
    foreach ($role->rolepermissions as $key => $permission) {
        $array[$key] = $permission;
    }
}

这在性能方面可能更有效率。

答案 1 :(得分:1)

您正在返回$permission->permission_name 所以return强制函数停止执行。你最好还是退回阵列。

 $roles = [];
 foreach ($user->roles as $role) {
      foreach ($role->rolepermissions as $permission) {
        $roles[] = $permission->permission_name;
      }
    }
}
return $roles;