2017-02-14 6 views
1

私は3つのテーブルがあります。今雄弁多対多の関係

groups: 
id, name 

group_members: 
id, group_id, user_id 

users: 
id 

、私はしているよ、何が、メンバーが関連付けられているグループ(単にグループ)の全てを取得することです彼らはそう、例えば、私は以下の持っている :私はid = 1を持つユーザーが属するすべてのグループを取得したい場合は

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

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

users 
1 
2 

を、それが返す必要があります:

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 *グループg、group_members gm ここで、gm.group_id = g.id とgm.user_id = '194' グループby g.id – user1970557

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

これは動作するようです。私はbelongsToなどの関係を私のモデルに追加しなければならなかった