2013-12-21 156 views
2

我目前正在嘗試使3個表格之間的關係。Laravel模型3個表格之間的關係

Users 
    uid 
    username 
Groups 
    gid 
    groupname 
GroupMembers 
    uid 
    gid 

憑藉雄辯的ORM,我該如何獲得用戶組?
只需1線查詢我想回到像一個JSON回覆:(搜索組,我的... ...關鍵字的成員:管理員)

Status 200 
User uid 1 
     username mrwootwoot 

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

我走到這一步是:

$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 groups() 
{ 
return $this->hasManyThrough('groups', 'GroupMembers', 'uid', 'id'); 
} 

在組模型放(不知道這是必要的

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

,然後拿到團體使用

return $this->user->groups 

我這裏來自laravel docs http://laravel.com/docs/eloquent#has-many-through

+0

更新了我的答案... – madziikoy

+0

上面的解決方案並不是真正的雄辯關係的最佳解決方案。請按照文檔:https://laravel.com/docs/5.4/eloquent-relationships#many-to-many –