2017-01-11 7 views
0

2 개의 다 대다 관계가 있고 모든 관련 데이터를 가져 오려고합니다. 사용자 모델 :Laravel 모델의 모든 관련 데이터 가져 오기

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

역할 모델 : 나는 정책을 내 rolepermissions에서 모든 값을 얻고 싶은거야

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

.

내 정책 :

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에 도달하면 실행을 멈추고 결과를 반환합니다. 예를 들어 yield return과 C#에서 실제로 여러 값을 반환 할 수있는 것과 다릅니다.

지금
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

관련 문제