エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

Laravelで多対多のリレーションを組む【71日目】

f:id:willow710kut:20171223184135j:plain

多対多とは

ある人は、いくつかのグループに所属しています。
あるグループは、いくつかの人で構成されてます。

これが多対多です。お互いが複数の対象を持ってますね。
これをデータベースで表現すると、中間テーブルと言うものが必要です。
データベースだとこんな感じ。

menbers
id|name
1 | ういろう
2 | りんご
3 | マジシャン
groups
id|name
1 | 野球部
2 | 麻雀部
3 | ダーツ部
member_group
id|member_id|group_id
1 | 2| 1
2 | 2| 3
3 | 3| 3 
4 | 3| 2

野球部(group_1)は、りんご(member_2)が所属している。
マジシャン(member_3)は、麻雀部(group_2)とダーツ部(group_3)に所属している。

こんな感じの意味になります。

Laravelでリレーションを組むには?

参考 Eloquent:リレーション 5.1 Laravel

結論
belongsToManyを使う。

class Member extends Model
{
    /**
     * memberが属するグループを取得
     */
    public function groups()
    {
        return $this->belongsToMany('App\Group');
    }
}

この時、中間テーブルの名前がmember_groupとは異なる名前の時は、

class Member extends Model
{
    /**
     * memberが属するグループを取得
     */
    public function groups()
    {
        return $this->belongsToMany('App\Group', 'other_table');
    }
}

日記

ゆっくりと記事書けるのいいね。
他にもネタがあるのでゆっくり消化しよう。

そういや、ザ・シークレットが面白いと聞いたので見てみた。最初は宗教かな?通販かな?って感じだったけど、 5分したらなるほどそういう話ね。ってなった。