如何在laravel中为角色和权限建立hasManyThrough关系?

时间:2016-02-25 09:16:00

标签: php mysql laravel laravel-5 has-many-through

因此,我了解如何为用户加载角色以及角色的权限。

但现在我有一个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中有没有办法解决这个问题,还是我不得不求助于使用查询构建器?如果是,如何使用查询构建器执行相同的操作?

1 个答案:

答案 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']);
    }
}