使用多态关系从2个表中获取数据

yfjy0ee7  于 2021-09-29  发布在  Java
关注(0)|答案(0)|浏览(178)

我写这个问题是因为我已经花了几个小时试图找到解决问题的办法,但我没有成功。碰巧我正试图用我在模型中创建的方法返回两个表的关系的内容,其中包含与某个表关联的记录。发生的情况是,其中一个表具有多对多多态关系,而另一个表具有多对多关系。我将向您展示我迄今为止创建的内容的结构:
table:

1. users
 2. roles
 3. permissions
 4. permission_role (Pivot table for many to many relationship between permissions and roles )

These 2 tables are for the polymorphic relationship, since not only the ```User``` model will be used, but to make the question a little more specific, I have used the name ```user``` in the tables.
 5. user_roles
 6. user_permissions

一个用户可以有多个角色,反之亦然。
角色可以具有多个权限,反之亦然。
用户可以直接拥有多个权限(无需将用户与角色关联)
我向您展示了我的模型的结构:
关系
models/role.php

<?php

namespace App\Models;

...
class Role extends Model
{
    ...

    public function users()
    {
        return $this->morphedByMany(User::class, 'model', 'user_roles');
    }

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

models/permissions.php

<?php

namespace App\Models;

...
class Permission extends Model
{
    ...

    public function users()
    {
        return $this->morphedByMany(User::class, 'model', 'user_permissions');
    }

    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }
}

models/user.php

<?php

namespace App\Models;

...
class User extends Authenticatable
{
    ...

    public function roles()
    {
        return $this->morphToMany(Roles::class, 'model', 'user_roles');
    }

    public function permissions()
    {
        return $this->morphToMany(Permissions::class, 'model', 'user_permissions');
    }
}

我想要达到的是在未来的日子里 User model,一种允许我获取用户拥有的所有权限的方法,可以是用户直接拥有的权限,也可以是用户通过与其关联的角色拥有的权限。假设如下: User 1 分配
Role 1 Role 1 ,具有2个权限, Permission 1
Permission 2 User 1 也有 Permission 3 直接关联的权限。
因此 User 1 有: Permission 1 , Permission 2Permission 3 我已尝试做以下工作:
models/user.php

<?php

namespace App\Models;

...
class User extends Authenticatable
{
    public function getAllPermissions()
    {
        return $this->loadMissing('roles', 'permissions')->roles->flatMap(function ($role) {
            return $role->permissions;
        });
    }
...
}

但是我没有得到我期望的结果。如果您能给我任何帮助,我将不胜感激。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题