2017-02-14 175 views
1

我有3个表:雄辩许多一对多的关系

groups: 
id, name 

group_members: 
id, group_id, user_id 

users: 
id 

现在,我在寻找什么做的,是让所有组(只组),有与相关成员他们 所以,比如我有以下几点:

groups 
1, test 
2, test-1 
3, test-2 

group_members 
1, 1, 1 
2, 1, 2 
3, 3, 1 

users 
1 
2 

如果我想要得到与id = 1用户所属的所有组,它应该返回:

groups 
1, test 
3, test-2 

是否有雄辩的方式,我可以只返回组(集合中)

感谢

回答

1

您可以使用whereHas()

Group::whereHas('users', function($q) use($userId) { 
    $q->where('id', $userId); 
})->get(); 

或者:

User::find($userId)->groups()->get(); 
+0

嘿你能提供该计划的SQL查询,可以达到同样的 – StateLess

+0

@ThunderBird我试图避免使用原始查询,但您可以安装Laravel Debugbar看看所有由Eloquent生成的原始查询。或者使用' - > toSql()'函数。 –

+0

select * from groups g,group_members gm 其中gm.group_id = g.id 和gm.user_id ='194' group by g.id – user1970557

0
Group::whereHas('members', function($q) use($userId) { 
    $q->where('user_id', $userId); 
})->get(); 

这似乎工作。我不得不添加一些belongsTo等关系,在我的模型