Я создаю приложение со многими для многих между пользователями и ролями и многими для многих между ролями и разрешениями.
Я хотел бы получить разрешения пользователя с hasManyThrough, но это не работает. Это отношение ожидает user_id в таблице ролей, но поскольку их много ко многим, их, конечно, нет.
У кого есть починка?
преодолеть отношения «многие ко многим» невозможно.
На это ответили более подробно в другой теме:
HasManyThrough с отношением один ко многим
И вы также можете сослаться на: http://laravel-tricks.com/tricks/i-has-many-through-relation-laravel-the-missed-shortcut
Существует пакет композитора Laravel 5.5, который может выполнять многоуровневые отношения (глубокие)
Пакет:
https://github.com/staudenmeir/eloquent-has-many-deep
Пример:
User
→ принадлежит многим → Role
→ принадлежит многим → Permission
class User extends Model
{
use \Staudenmeir\EloquentHasManyDeep\HasRelationships;
public function permissions()
{
return $this->hasManyDeep(
'App\Permission',
['role_user', 'App\Role', 'permission_role'], // Pivot tables/models starting from the Parent, which is the User
);
}
}
Пример, если необходимо определить внешние ключи:
https://github.com/staudenmeir/eloquent-has-many-deep/issues/7#issuecomment-431477943