https://readouble.com/laravel/5.1/ja/eloquent-relationships.html
こちらで紹介されているように多対多のリレーションを試しました。
ユーザには複数のロールが結びつき
ロールには複数のユーザが結び付く
このようなとき以下のテーブル構成にすると思います。
users
roles
role_user
例えば、特定のロールに紐づくユーザ一覧だと、以下で取得できるかと思います。
$role = Role::find(1); $users = $role->users();
しかし、特定の複数のユーザのうち、特定のロールに紐づくユーザを検索する時、方法が思い浮かびません。
// 3名のユーザを取得 $users = User::find([1,2,3]); // 検索条件にしたロールを取得 $role = Role::find(1); // 3名のユーザうち、検索条件のロールを持っているユーザを取得 $users = $user->where(.....)
このwhere内でなんとか検索できるものなのか、そもそもそういう検索方法はないのでしょうか?
検索方法が分かりました。
$users = Employee::whereHas('roles', function ($query) { $query->whereIn('role_id', [10,11,12]); }) ->get();
このようにして取ることが出来ましたが、role_idが10,11,12のもだけを取得が出来ません。
上記の例だと、10,11,12のどれかのroleを持っているユーザであれば取得可能です。
whereInの代わりに、whereを使うと、変な挙動となります。
例えば、あるユーザのロールが10,11で、
検索条件には、10,11,12としている場合ヒットします。
また、あるユーザのロールが11,12だった場合にはヒットしなくなります。
どうやらロールの先頭から評価していっているようです。
どうすれば、ロールを10,11,12を持つユーザを取得できるのでしょうか?
完全一致の場合のみ取得したいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。