2017-04-04 11 views
0

LaravelにWebサイトビルドがあります。 私は2つのテーブル - グループとグループのメンバーを持っています。グループのメンバーを取得し、Laravelでクエリとしてグループを取得するクエリを結合します。

group_memberについては、表中の行はid,group_idおよびuser_idである。

グループには名前と説明があります。

ユーザーがグループに参加すると、group_memberテーブルに行が作成されます。

しかし、今はユーザーが属するグループを取得する必要があります。私は= 5user_idを持っている場合

だから、私はgroup_memberuser_id = 5内のすべての行を取得して、対応するグループを取得する必要があるので、私はグループを照会することができます。

私は ... $groups = Groups::whereGroup_memberような何かをする必要がある。しかし、それはメンバーが誰であるかspecificiesどこGroupsに何があるので、私は、そのようなモデルを照会しないカント、それだけでグループの詳細です - メンバーはに次の特定されていますgroup_memberテーブル。

laravelクエリ標準を使用しているメンバーはどのようにしてグループを取得できますか?

+0

になり、ユーザー::見つける(5) - > groups'? –

答えて

1
ユーザーIDを持っている場合、

class Group 
... 
public function members() { 
    return $this->belongsToMany(User::class); // Users (members) that belongs to Group 
} 

class User 
... 
public function groups() { 
    return $this->belongsToMany(Group::class, 'group_member', 'user_id', 'group_id'); // Groups that User belongs to 
} 

とコントローラでの

お使いのUser.phpモデル

public function group_member(){ 
    return $this->hasMany(GroupMember::class,'user_id','id;); 
} 
あなたの GroupMember.phpモデルで

public function group(){ 
    return $this->belongsTo(Group::class,'group_id','id'); 
} 

あなたのクエリは=何 `$グループに関する

$users = User::with('group_member.group')->find($user_id); 
+0

こんにちは、 私はこれを動作させることはできません。私はuser_id = Auth :: user() - > id - >がどこにあるgroup_membersの行に基づいてグループを取得してから、foreachステートメント内のグループをループすることができるようにグループを戻すのかわかりません – Patrick

+0

あなたは上記のコードを試してみませんか?何を手に入れましたか?あなたはそれを投稿できますか? –

+0

外部キーが含まれていないため、質問で指定した 'Groups :: whereGroup_member..'を実行することはできません。 –

0

あなたは多対多の関係を使用する必要があります公式ドキュメントに書かれたこの程度

$groups = User::where('id', $user_id)->groups; 

より:https://laravel.com/docs/5.4/eloquent-relationships#many-to-many

+0

これはgroup_membersテーブルを含んでいないので、これは使用不可能になります。 – Patrick

関連する問題