我有 3 张桌子。用户权限表表示哪个用户拥有哪个权限。
用户表
id | name
1 | jack
2 | bob
权限表
id | name
1 | manage users
2 | manage jobs
用户权限表
id | user_id | permission_id
1 | 1 | 1
2 | 1 | 2
3 | 2 | 1
用户模型
public function userPermission()
{
return $this->hasMany(UserPermission::class);
}
用户权限模型
public function user()
{
return $this->belongsTo(User::class);
}
如果我执行 auth()->user()->userPermission,我会从该用户的权限表中获取所有数据。有没有办法让我不是获取权限表的 id,而是获取所有权限名称?也许在一个数组中。所以用户 jack 将拥有 ['manage users','manage jobs']
答案 0 :(得分:0)
我看到 User 和 Permission 有“多对多”关系。 https://laravel.com/docs/8.x/eloquent-relationships#many-to-many
确保用户权限表的名称为“permission_user”,并且在用户模型中,您应该定义如下关系方法:
public function permission() {
return $this->belongsToMany(Permission::class);
}
所以当你调用 auth()->user()->permission
时,你可以得到一个属于用户的 Permission Class 集合。
如果要获取属于某个用户的所有权限的名称。只需使用 pluck()
收集方法。
链接:https://laravel.com/docs/8.x/collections#method-pluck
答案 1 :(得分:0)
您应该首先在关系中使用外键和本地键。
另请参阅 Laravel Doc 上的多对多关系和数据透视表。