2017-01-11 10 views
0

私は多対多の関係が2つあり、すべての関連データを取得しようとしています。 Userモデル: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

関連する問題