2013-12-21 3 views
2

현재 3 개의 테이블 사이의 관계를 만들려고합니다.Laravel Model 3 테이블 간의 관계

Users 
    uid 
    username 
Groups 
    gid 
    groupname 
GroupMembers 
    uid 
    gid 

웅변적인 ORM을 사용하면 어떻게 사용자 그룹을 얻을 수 있습니까?

Status 200 
User uid 1 
     username mrwootwoot 

     Groups 
      { 
      gid 1 
      groupname administrators 
      } 
      { 
      gid 2 
      groupname wadmin 
      } 

내가 지금까지 가지고하는 것은 :

: (관리자 난의 ... 키워드 구성원입니다 검색 그룹 :) 쿼리의 단지 1 라인
나는 같은 JSON 응답을 반환하고 싶어
$joined_networks = User::whereHas('groups', function($q) 
{ 
    $q->where('is_blocked', '=', 0)->where('name','like',"%admin%"); 
})->with('groups')->where('uid', $user_id)->get(); 

(...) 

return Response::json(array(
    'status' => 200, 
    'user' => $joined_networks->toArray() 
)); 

이 부분 코드는 사용자가 차단되지 않은 사용자가 속해있는 그룹을 찾는 것으로 가정합니다. 갱신

$joined = User::with('group')->where('uid', $user_id)->get(); 

return Response::json(array(
    'status' => 200, 
    'results' => $joined 
)); 


내 사용자 모델 : 이제

public function group() 
{ 
    return $this->hasManyThrough('Group', 'GroupMembers', 'uid', 'gid'); 
} 

그냥 아무것도에게

{ 
    "status": 200, 
    "results": { 

    } 
} 

을 반환

갱신

$user = User::find($user_id); 
$user_groups = $user->groups(); 

return Response::json(array(
    'status' => 200, 
    'results' => $user_groups 
)); 

하지만 여전히 상기와 같은이, 어떤 결과가 다시 주어지지된다.


갱신 그것은 출력의 실수였다. $ user_groups-> toArray()가 올바른 것입니다. 이제 잘 작동합니다.

답변

2

어때? 이

public function users() 
{ 
return $this->hasMany('GroupMembers', 'gid', 'id); 
} 

필요하고 얻을 수있는 그룹이 내가 가진

return $this->user->groups 

사용하는 경우 사용자 모델에

확실하지 (그룹 모델 넣어에서

public function groups() 
{ 
return $this->hasManyThrough('groups', 'GroupMembers', 'uid', 'id'); 
} 

를 넣어 여기 laravel docs의 http://laravel.com/docs/eloquent#has-many-through

+0

내 답변 업데이트 ... – madziikoy

+0

위의 솔루션은 실제 Eloquent Relationships을위한 최상의 솔루션이 아닙니다. 다음 문서를 따르십시오. https://laravel.com/docs/5.4/eloquent-relationships#many-to-many –