Laravel 关系返回名称而不是 id

时间:2021-05-05 04:19:28

标签: laravel

我有 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']

2 个答案:

答案 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 上的多对多关系和数据透视表。