2017-02-14 144 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等關係,在我的模型