因此,我了解如何为用户加载角色以及角色的权限。
但现在我有一个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 :(得分:0)
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']);
}
}