我有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;
}
}
}
它只返回一个结果,但我想从角色权限中获取所有相关数据。
答案 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;