laravel извлекает всех пользователей, где значение соответствует сводной таблице - PullRequest
0 голосов
/ 30 марта 2019

Поэтому я пытаюсь установить связь между user roles и profiles, все работает при создании, но я не знаю, как отфильтровать, когда я хочу составить список пользователей по определенной роли или профилю.

Вот структура таблицы, которая у меня есть сейчас.Каждая таблица соответствует своей модели, поэтому таблица users имеет модель User таблица roles имеет модель Role, и есть сводная таблица role_user, которая связывает пользователей с ролями.

Это будеттаблица ролей

+----+----------+---------------+
| id |   name   |  Description  |
+----+----------+---------------+
|  1 | admin    | Administrator |
|  2 | client   | Client        |
|  3 | operator | Operator      |
+----+----------+---------------+

Это будет сводная таблица для роли пользователя

+----+---------+---------+
| id | user_id | role_id |
+----+---------+---------+
|  1 |       1 |       3 |
|  2 |       2 |       1 |
+----+---------+---------+

И это обычно будет таблица пользователя

+----+--------+-----------------+
| id |  name  |      Email      |
+----+--------+-----------------+
|  1 | Mario  | mario@email.tld |
|  2 | Luighi | lui@email.tld   |
+----+--------+-----------------+

Так что, если бы я перечислил всеучетная запись, которая очень проста, так как я бы просто использовал

public function index(Request $request)
{

  $users = User::get();

  return view('users/index', compact('users'));
}

Если я хочу фильтровать пользователей по определенному имени или электронной почте, я бы просто отфильтровал

$users = User::where('name', 'Mario')->get();

Это будет получать все пользователи, гдесовпадающее имя - mario.

Теперь что-то более сложное, где я наткнулся, и я не могу найти ответы в Интернете.

Я хочу получить всех пользователей, где роль пользователя совпадает с сводной таблицейроль из таблицы ролей.

Примером будет

Retrieve All Users WHERE (pivot table) role_user EQUALS name OPERATOR from role table

Это вернет пользователя Mario, так как его идентификатор пользователя равен 1, а в сводной таблице user_id соответствует role_id 3, который в таблице ролей является рольюпо имени ОПЕРАТОР.

1 Ответ

0 голосов
/ 30 марта 2019

Вы можете подойти, присоединив пользовательскую таблицу к сводной таблице и отфильтровав, где role_id = operator_id

$operator_id =    
DB::table('roles')->where('name','=','operator')->first()->id;

DB::table('users') ->join('pivot', function ($join)       
   { $join->on('users.id', '=', 'pivot.user_id') ->where('pivot.role_id', 
   '=', $operator_id); }) ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...