2017-01-11 80 views
0

我有2多對多關係並試圖獲取所有相關數據。 用戶模式:Laravel獲取模型中的所有相關數據

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; 
     } 
    } 
} 

它只返回結果只有一個,但我想從角色權限的所有相關數據。

回答

1

您正在返回$permission->permission_name 因此return強制該功能停止執行。你最好返回一個數組。

$roles = []; 
foreach ($user->roles as $role) { 
     foreach ($role->rolepermissions as $permission) { 
     $roles[] = $permission->permission_name; 
     } 
    } 
} 
return $roles; 
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; 
    } 
} 

這在性能方面可能更有效。

+0

打我太它,因爲我打字:-) – rchatburn

+0

@rchatburn哈哈,你需要快速這裏;-) – Markinson

相關問題