Как установить отношение hasManyThrough в laravel для ролей и разрешений?

Итак, я понимаю, как загрузить роли для пользователя и разрешения для роли.

Но теперь у меня есть user стол, role стол и permission Таблица. у меня тоже есть role_user таблица для связи пользователей и ролей. И конечно permission_role для связывания разрешений и ролей.

Теперь, когда я хочу получить все роли для пользователя, я просто делаю что-то вроде этого:

public function roles()
{
return $this->belongsToMany('Uppdragshuset\AO\Tenant\Models\Role');
}

Точно так же я могу получить разрешения для ролей следующим образом:

public function permissions()
{
return $this->belongsToMany(Permission::class);
}

Теперь, согласно документации по laravel, я могу напрямую получать разрешения для пользователя, используя отношение hasManyThrough, например, так:

public function permissions()
{
return $this->hasManyThrough(Permission::class, Role::class);
}

Но это возвращается с ошибкой, говорящей:

Неизвестный столбец ‘role.user_id’ в ‘списке полей’

Я думаю, что понимаю почему. Laravel ищет user_id поле в role таблица, но он не понимает, что это отношение многие ко многим, и он должен искать его в сводной таблице.

Так как же обойти это? Есть ли способ обойти это в Eloquent или мне придется прибегнуть к помощи построителя запросов? И если да, как сделать то же самое с построителем запросов?

0

Решение

HasManyThrough может использоваться только для соединения двух HasMany отношения. Для вашего случая нет родных отношений.

Я создал HasManyThrough отношения с неограниченным уровнем и поддержкой BelongsToMany:
Репозиторий на GitHub

После установки вы можете использовать его так:

class User extends Model {
use \Staudenmeir\EloquentHasManyDeep\HasRelationships;

public function permissions() {
return $this->hasManyDeep(Permission::class, ['role_user', Role::class, 'permission_role']);
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]