Laravel Eloquent - 返回具有特定角色的用户(多对多关系)
Posted
技术标签:
【中文标题】Laravel Eloquent - 返回具有特定角色的用户(多对多关系)【英文标题】:Laravel Eloquent - Return Users with specific role (many-to-many relationship) 【发布时间】:2022-01-08 05:41:50 【问题描述】:我有一个应用程序,我想在其中查找具有特定角色(在本例中为超级管理员)的所有用户(来自指定客户端)
一个客户端可以有很多用户
public function users()
return $this->hasMany(User::class);
一个用户可以属于多个角色
public function roles()
return $this->belongsToMany(Role::class);
我希望能够从具有特定角色的客户端返回所有用户。
所以在客户端模型中我想要这样的东西:
public function superAdmins()
return ... // NOT SURE WHAT TO PUT HERE
【问题讨论】:
你试过使用hasMany(User::class)->whereHas('roles', function($query)return $query->where('name', 'super');)
吗? laravel.com/docs/8.x/…
@SuperDJ - 我刚刚设法实现了非常相似但不太好的东西。这是一种享受。添加它作为答案,我会给你信用
另外,由于您的 Client
模型上已经有 public function users()
:return $this->users()->whereHas('roles', function ($query) ... );
- 您可以链接关系而不是重新定义 hasMany(User::class)
【参考方案1】:
在定义关系时,您也可以添加where()
语句。
这意味着你可以使用whereHas
:
public function superAdmins()
return $this->hasMany(User::class)
->whereHas('roles', function($query)
return $query->where('name', 'super');
);
【讨论】:
以上是关于Laravel Eloquent - 返回具有特定角色的用户(多对多关系)的主要内容,如果未能解决你的问题,请参考以下文章
检查从 Laravel 8 中 eloquent 返回的特定值
Laravel Eloquent - 从相关模型中检索特定列
Laravel 4.2 Eloquent 获取特定用户和特定角色
laravel 返回与 eloquent 和 laravel 的关系