5

users、users_groups、groups の 3 つのテーブルがあるとします。users_groups テーブルからユーザーのグループを取得するにはどうすればよいですか?

class User extends Eloquent {
    protected $table = 'users';
}

class Groups extends Eloquent {
    protected $table = 'groups';
}

class Usergroups extends Eloquent {
    protected $table = 'users_groups';
}
4

1 に答える 1

8

ご要望に応じて、特定のユース ケースの簡単な例をまとめました。

テーブル:

Eloquent は、このようなシナリオで 3 つのデータベース テーブルを作成することを提案しています: usersgroupsおよびgroup_user

Laravel のドキュメントには、次のように記載されています。

テーブルのgroup_user名前は、関連するモデル名のアルファベット順に由来します。

group_userテーブルには、グループおよびユーザー エントリの主キーを含む列が含まuser_idれている必要があります。テーブルは、ピボット テーブルと呼ばれるものですgroup_idgroup_user

これは3NFに準拠しています (興味がある場合)。

モデル:

Userモデルには次のコードが含まれている必要があります。

<?php 

class User extends Eloquent {

    //...Other code…

    public function groups()
    {
        return $this->belongsToMany('Group');
    }

} 

Groupモデルには次のコードが含まれている必要があります。

<?php

class Group extends Eloquent {

    //...Other code…

    public function users()
    {
        return $this->belongsToMany('User');
    }

    //...Other code…

}

質問にあるようなモデルは必要ありません。UserGroup

使用法:

特定のユーザーが属するすべてのグループを取得するには、次のようにします。

$user = User::find($user_id);
$user_groups = $user->groups();

同様に、特定のグループに属するすべてのユーザーを取得するには、次のようにします。

$group = Group::find($group_id);
$group_users = $group->users();

ユーザーをグループに追加/削除するには、次のようにします。

$user = User::find($user_id);
//Add a user
$user->groups()->attach($group_id);
//Detach a user
$user->groups()->detach($group_id);

他の:

ピボット テーブルについてはこちらの Laravel ドキュメントで、マイグレーションで (ピボット テーブルの) 外部キーを定義する方法については、こちらを参照してください。

それが役立つことを願っています!

于 2013-08-25T13:24:32.697 に答える