我写这个问题是因为我已经花了几个小时试图找到解决问题的办法,但我没有成功。碰巧我正试图用我在模型中创建的方法返回两个表的关系的内容,其中包含与某个表关联的记录。发生的情况是,其中一个表具有多对多多态关系,而另一个表具有多对多关系。我将向您展示我迄今为止创建的内容的结构:
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 2
及 Permission 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;
});
}
...
}
但是我没有得到我期望的结果。如果您能给我任何帮助,我将不胜感激。
暂无答案!
目前还没有任何答案,快来回答吧!