#laravel
Вопрос:
У меня есть 3 стола. Таблица разрешений пользователя указывает, у какого пользователя есть какие разрешения.
Таблица пользователей
id | name
1 | jack
2 | bob
Таблица разрешений
id | name
1 | manage users
2 | manage jobs
Таблица разрешений пользователя
id | user_id | permission_id
1 | 1 | 1
2 | 1 | 2
3 | 2 | 1
Модель пользователя
public function userPermission()
{
return $this->hasMany(UserPermission::class);
}
Модель взаимодействия с пользователем
public function user()
{
return $this->belongsTo(User::class);
}
Если я выполняю аутентификацию()->пользователь()->>Разрешение пользователя, я получаю все данные из таблицы разрешений для этого пользователя. Есть ли способ, чтобы вместо получения идентификатора таблицы разрешений я вместо этого получал все имена разрешений ? Может быть, в массиве. Таким образом, у пользователя Джека будет [«управление пользователями»,»управление заданиями»]
Ответ №1:
Я видел, что Пользователь и разрешение имеют отношения «многие ко многим». https://laravel.com/docs/8.x/eloquent-relationships#many-to-many
Убедитесь, что имя таблицы разрешений пользователя — «permission_user», и в модели пользователя вы должны определить метод отношения следующим образом :
public function permission() {
return $this->belongsToMany(Permission::class);
}
Поэтому , когда вы звоните auth()->user()->permission
, вы можете получить коллекцию классов разрешений, принадлежащих пользователю.
Если вы хотите получить имя всех разрешений, принадлежащих пользователю. Просто используйте метод pluck()
сбора. Ссылка: https://laravel.com/docs/8.x/collections#method-pluck
Комментарии:
1. но связь между пользователем и разрешением находится внутри таблицы разрешений пользователя
2. @stalwart1014 Да, я видел, что таблица разрешений пользователя похожа на сводную таблицу для сохранения этой связи. С какой проблемой вы столкнулись?
3. Мне нужно получить все имена разрешений, которые есть у этого пользователя. UserPermission возвращает идентификатор разрешения для этого пользователя, вместо этого мне нужны имена.
4. @stalwart1014 Я понял это. Поэтому я рекомендую вам изменить метод отношения, который вы объявили в классе модели пользователя.
Ответ №2:
Сначала вы должны использовать внешние и локальные ключи в своих отношениях.
Также взгляните на многие отношения и сводные таблицы в Laravel Doc.