2016-10-19 2 views
1

私はこれを行うにはいくつかの方法があると思いますが、私が効率よくララベルに最適化された方法で作業していることを確認したいと思います。多対多の関係を最も "雄弁な"方法でどのように構造化しますか?

私はユーザーとチームを持っています。ユーザーは多くのチームに所属することができます。もちろん、チームには多くのユーザーが参加できます。典型的な多対多:

class User extends Authenticatable 
{ 
    public function teams() 
    { 
     return $this->belongsToMany('App\Team'); 
    } 
} 

と、

class Team extends Model 
{ 
    public function users() 
    { 
     return $this->belongsToMany('App\User'); 
    } 
} 

は、私はまた、各ユーザーがそれぞれのチーム内で「ステータス」を持っていると思います。例えば、「アクティブ」および「非アクティブ」。

"ステータス"の3番目のテーブル/モデルを作成し、ユーザーとチームの両方にピボットを設定しますか?もしそうなら、どのように私は雄弁を使って各チームの特定のステータスのユーザーを効率的に取得するのですか?

私は考慮すべき別のアプローチがありますか?

答えて

3

多対多の場合は、明らかに中間テーブルが必要です。 team_userそれです。そして、status列をこの表に追加することができます。

team_id user_id status 
1   1   Active 
2   1   Inactive 
.... 

関係:

public function teams() 
{ 
    return $this->belongsToMany('App\Team')->withPivot('status'); 
} 
public function users() 
{ 
    return $this->belongsToMany('App\User')->withPivot('status'); 
} 

そして、ここで

$users=User::with('teams')->get(); 
foreach($users as $user) 
{ 
    foreach($user->teams as $team) 
    { 
     echo $team->pivot->status; 
    } 
} 

Working with pivot tables

+0

ああ、感謝Sanzeebためのドキュメントです。ピボットテーブル自体にステータス情報を追加できるかどうかはわかりませんでした。私は次の日にこれを試してみて、報告して戻します。 – sersun

+0

完全に動作します。ありがとう! – sersun

関連する問題