8

ユーザー、ロール、および role_user を説明する 3 つのテーブルがあります。これらは次のようになります。

users -> id, name
roles -> id, name
role_user -> user_id, role_id

私の User クラスには次のものがあります。

public function roles()
{
    return $this->belongsToMany('Role');
}

ここでの目的はもちろん、ユーザーが複数の役割を持つことができるようにすることです。

正常に動作するようなクエリを実行できますUser::with('roles')->get()

私が望むのは、理想的には名前で指定された特定の役割を持つユーザーを選択することだけですが、必要に応じて代わりに ID で指定することもできます。Eloquentを使用してこれを行うにはどうすればよいですか?

4

2 に答える 2

10

モデルにbelongsToMany関係を書くRole

    class Role extends Eloquent {
        public function users() {
            $this->belongsToMany('Users');
        }
    }

次に、Following Eloquent Query を使用します。

    $role = Role::with('users')->whereName($name)->first();

$nameとしての役割を持つすべてのユーザーにアクセスできます$role->users

于 2013-11-12T20:38:51.913 に答える
5

tharumaxによる回答は完全に有効であり、非常に便利です。唯一の問題は、他のものでクエリを実行したい場合です。たとえば、admin2014 年より前に役割を持ち、サインアップしたユーザーです。または、それをスコープとして使用したい場合は、彼のやり方ではできません。

これは別の方法ですが、クエリで直接実行します (ただし、これは ID で検索します)。

User::join('role_user', 'users.id', '=', 'role_user.user_id')
      ->where('role_user.role_id',$id)->get();

必要に応じて、構文と管理を容易にするスコープを作成できます。たとえば、ロールを持つユーザーを取得したいadmin

範囲:

// Inside User model

public function scopeAdmins($query)
{
  return $query->join('rol_user', 'users.id', '=', 'rol_user.user_id')
               ->where('rol_user.rol_id', id_of_admin );
}

次に、これを行っているすべてのadminユーザーを簡単に取得できます (必要に応じて他の条件を追加します)。

User::admins()->get();
于 2015-03-12T15:46:11.447 に答える