【问题标题】:Laravel Counting and retrieving many to many relationshipsLaravel 计数和检索多对多关系
【发布时间】:2023-03-12 03:07:01
【问题描述】:

我有很多 Laravel 关系很多用户有很多角色

我知道我可以执行 User::find(1)->roles()->get() 来为用户获取 ID 为 1 的所有角色,但这需要我知道角色的 ID 为反对只是它的名字

我可以在我的用户存储库中放入什么样的雄辩的查询来做类似的事情

public function getAllUsersWithRole($roleType){

  //Query goes here

}

其中 $roleType 是角色的名称。所以我需要根据 hte 名称查找角色的 ID,然后在数据透视表中返回具有该角色 ID 的用户

【问题讨论】:

  • 你肯定把事情复杂化了。您拥有该角色,然后只需执行 $role->users; 即可获取具有该角色的所有用户。
  • 我没有这个角色。我只有角色的名称,我想计算有多少用户拥有这些角色。
  • 然后为计数创建一个伪关系,以便您可以急切地加载它 - 就像这里的tagsstackoverflow.com/questions/25662854/…

标签: laravel many-to-many eloquent repository-pattern


【解决方案1】:

这看起来像你想要的吗:

public function getAllUsersWithRole($roleType){

  $role= Role::where('name', $roleType)->first();
  $users= $role->users;

  return $users;

}

【讨论】:

    【解决方案2】:

    如果您在 Eloquent 模型中有正确的关系定义,您应该能够通过这种方式通过角色名称获取用户:

    $roleType = 'YourRoleName';
    $users = Role::whereType($roleType)->first()->users;
    

    【讨论】:

      【解决方案3】:

      获取用户,然后获取所有用户的角色。

      public function getAllUsersWithRole($roleType){
      
        $users = User::where('role_type', '=', $roleType)->get();
        $roles = $users->roles()->get();
      
        return $roles;
      
      }
      

      【讨论】:

      • 这行得通吗?它是多对多关系,因此用户中没有“role_type”字段。关系存储在数据透视表中
      • 那时不会。在这种情况下,您可以直接查询数据透视表,或者如果用户不多,则将它们全部检索并手动过滤列表。
      • 即使 users 表上有 role_type 字段也不行。 $users->roles() 错了。
      猜你喜欢
      • 2014-04-18
      • 2017-01-17
      • 2017-05-25
      • 2019-08-17
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 2013-09-30
      相关资源
      最近更新 更多