Я хочу проверить в политике, есть ли у пользователя права доступа. Разрешения привязаны к группам, и пользователь является членом одной или нескольких групп. Чтобы связать эти 3 модели, я использую две сводные таблицы (group_user / member & group_permission).
| users | group_user | groups | group_permission | permissions |
|-------|------------|--------|------------------|-------------|
| id | user_id | id | group_id | id |
| name | group_id | name | permission_id | name |
Теперь я хочу изменить приведенный ниже код на более простой блок кода.
От:
$result = DB::table('users')
->join('group_user', 'users.id', '=', 'group_user.user_id')
->join('groups', 'group_user.group_id', '=', 'groups.id')
->join('group_permission', 'groups.id', '=', 'group_permission.group_id')
->join('permissions', 'group_permission.permission_id', '=', 'permissions.id')
->select('permissions.*')->where('users.id', '=', $user->id)->where('permissions.name', '=', 'viewAny.student')->count();
Кому:
$user->permissions()->where('name','viewAny.student')->count();
Я уже добавил, добавьте эту функцию в свою модель User, где Member является сводной моделью:
public function permissions()
{
return $this->hasManyThrough(
Permission::class, // The model to access to
Member::class, // The intermediate table that connects the User with the Podcast.
'user_id', // The column of the intermediate table that connects to this model by its ID.
'group_id', // The column of the intermediate table that connects the Podcast by its ID.
'id', // The column that connects this model with the intermediate model table.
'group_id' // The column of the Audio Files table that ties it to the Podcast.
);
}
Но ему нужна вторая сводная таблица, теперь она дает мне:
SQLSTATE [HY000]: общая ошибка: 1 нет такого столбца: permissions.group_id (SQL: выберите "разрешения ". *," member "." user_id "как" laravel_through_key "из" permissions "inner join" member "для" member "." group_id "=" permissions "." group_id "где" member "." user_id "= 51 )