Laravel 计数和检索多对多关系

Posted

技术标签:

【中文标题】Laravel 计数和检索多对多关系【英文标题】:Laravel Counting and retrieving many to many relationships 【发布时间】:2014-11-24 05:15:09 【问题描述】:

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

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

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

public function getAllUsersWithRole($roleType)

  //Query goes here


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

【问题讨论】:

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

以上是关于Laravel 计数和检索多对多关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 关系多对多按外键计数相关数据

Laravel 多对多关系 - 检索模型

如何在 Laravel 中检索链接到多对多关系的模型?

如何在多对多关系 Laravel 中检索所有相关模型?

如何在laravel中从多对多关系中检索多个记录

从laravel中的多对多关系中获取单列