所以我明白了如何加载用户的角色和角色的权限。
但现在我有一个 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);
}
但是返回时出现错误:
Unknown column 'role.user_id' in 'field list'
我想我明白为什么。 Laravel 正在 role
表中查找 user_id
字段,但它不明白这是一个多对多关系,它应该在数据透视表中查找它。
那么解决这个问题的方法是什么呢? Eloquent 有没有办法解决这个问题,或者我必须求助于使用查询生成器?如果是,如何使用查询生成器执行相同的操作?
最佳答案
HasManyThrough
只能用于连接两个 HasMany
关系。您的案例没有原生关系。
我创建了一个具有无限级别的 HasManyThrough
关系,并支持 BelongsToMany
:
Repository on GitHub
安装完成后,可以这样使用:
class User extends Model {
use \Staudenmeir\EloquentHasManyDeep\HasRelationships;
public function permissions() {
return $this->hasManyDeep(Permission::class, ['role_user', Role::class, 'permission_role']);
}
}
关于php - 如何在laravel中建立角色和权限的hasManyThrough关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35622915/