Можете ли вы использовать две сводные таблицы (4 объединения) в eloquent? - PullRequest
0 голосов
/ 21 апреля 2020

Я хочу проверить в политике, есть ли у пользователя права доступа. Разрешения привязаны к группам, и пользователь является членом одной или нескольких групп. Чтобы связать эти 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 )

...