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

标签 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);
}

但是返回时出现错误:

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/

相关文章:

javascript - POST 成功后 Ajax 重定向到另一个页面

python - 为什么在更改超时变量后,Amazon RDS 上的 MySQL 不断使我的连接超时?

mysql - 该 SaaS 的最佳数据库结构

php - 返回资源 ID #5 的 mySQL 查询

php - Behat 3 和 Laravel,测试环境不被尊重

php - 你如何将你的 sql 查询嵌入到 php 脚本中(编码风格)?

PHP mySQL - 将多个查询合并为 1

PHPWord固定单元格宽度

css - laravel 元素无法加载 Font Awesome 样板

php - 无法实时从redis读取