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 的关系

Laravel Eloquent::Find() 返回具有现有 ID 的 NULL

Laravel Eloquent:返回数组键作为字段 ID