Как настроить Eloquent Relationship для Laravel Zizaco / trust, чтобы получить разрешения на роль?

В Laravel Entrust Zizaco / entrust как настроить отношения классов Entrust с Eloquent, чтобы может получить список разрешений, которые есть у роли:

// get admin role    
$adminRole = Role::find(1);   

// get the permission of the admin role
$adminRolePermissions = $adminRole->permissions();

Я пробовал добавить к классу Role следующие отношения Eloquent:

class Role class {
   public function permissions()
   {
      return $this->hasManyThrough('App\Permission', 'App\PermissionRole', 'role_id', 'permission_id');
   }
}

При этом, когда я получаю экземпляр роли и пытаюсь получить его разрешения следующим образом:

$adminRolePermissions = $adminRole->permission();

эта ошибка возникает:

SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'permission_role.id' в 'on clause' (SQL: выберите _5 _. *, _6 _._ 7_ из permissions внутреннего соединения permission_roles на _10 _._ 11_ = _12 _._ 13_, где _14 _._ 15_ = 1)

Конечно, я уже создал следующие модели: PermissionRole для permission_role стола.


person doncadavona    schedule 21.07.2015    source источник
comment
У вас действительно есть таблица role_permission? Предположим, что Eloquent смотрит на permission_role, в соответствии с соглашением именовать пары сводных таблиц в алфавитном порядке.   -  person alariva    schedule 22.07.2015
comment
Прости за это. Я отредактировал последнюю часть. У меня есть таблица permission_role и модель PermissionRole.   -  person doncadavona    schedule 22.07.2015
comment
Не могли бы вы также добавить файлы миграции для создания таблиц? Вы что-нибудь в них изменили? Что происходит, так это то, что coulmn permission_role_id не найден в этой связи, и теперь мы должны проверить, должен ли он существовать или запрос неверен. Вероятно, это связано с использованием метода hasManyThrough ().   -  person alariva    schedule 22.07.2015
comment
Я думаю, что hasManyHasThrough () тоже проблема. Я думаю, что для этого требуется первичный ключ в таблице permission_role, потому что у него его нет.   -  person doncadavona    schedule 23.07.2015


Ответы (1)


permission_role.id недействителен. В вашей таблице permission_role по умолчанию должны быть столбцы с именами «permission_id» и «role_id» из-за «Eloquent ORM Relationships». Возможно, вы переопределили имя первичного ключа вашей модели. Убедитесь, что файл Config.entrust имеет те же атрибуты, что и ваши модели.

person Pasha    schedule 27.06.2019