2014-09-29 60 views
0

我有一个多对多的关系Laravel很多用户有很多角色Laravel计数和检索多对多关系

我知道,我能做的用户::发现(1) - >角色() - >得到( )为用户获得ID为1的所有角色,但这需要我知道该角色的ID与其名称相反

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

public function getAllUsersWithRole($roleType){ 

    //Query goes here 

} 

其中$ roleType是角色的名称。所以,我需要查找基于兴田名角色的ID,然后返回具有该角色ID透视表

+0

你肯定过于复杂的事情。你有角色,那么简单地做'$ role-> users;'来获得具有这个角色的所有用户。 – 2014-09-29 18:19:58

+0

我没有这个角色。我只拥有角色的名称,我想要统计有多少用户拥有这些角色。 – 2014-09-29 18:31:28

+0

然后创建为计数伪关系,所以你可以贪婪加载它 - 就像'tags'这里:http://stackoverflow.com/questions/25662854/laravel-many-to-many-loading-related-models-with - 计数#25665268 – 2014-09-29 18:34:15

回答

0

抓住用户的用户,然后拿到角色的所有用户。

public function getAllUsersWithRole($roleType){ 

    $users = User::where('role_type', '=', $roleType)->get(); 
    $roles = $users->roles()->get(); 

    return $roles; 

} 
+0

这项工作?它是一个多对多的关系,所以用户中没有'role_type'字段。关系存储在数据透视表中 – 2014-09-29 21:24:47

+0

它不会那么做。您既可以直接查询的数据透视表在这种情况下,或者如果没有很多用户来说,检索所有这些,手动过滤列表。 – 2014-09-30 01:02:41

+0

即使用户表上有'role_type'字段,它也不起作用。 '$ users-> roles()'是错误的。 – 2014-09-30 07:04:51

0

如果你在你的口才模型正确关联定义,你应该能够通过角色名这种方式来获得用户:

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