Поэтому я пытаюсь установить связь между 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, который в таблице ролей является рольюпо имени ОПЕРАТОР.