如何根据用户在Symfony2+中的角色列出用户;有效地学说

如何根据用户在Symfony2+中的角色列出用户;有效地学说,symfony,doctrine-orm,Symfony,Doctrine Orm,我已经用这个代码完成了 $users = $this->getDoctrine()->getEntityManager() ->createQuery('SELECT tu FROM UserBundle:User tu') ->getResult(); $result = array(); foreach($users as $user){ if($user->hasRole('ROLE_CUSTOMER'))

我已经用这个代码完成了

$users = $this->getDoctrine()->getEntityManager()
            ->createQuery('SELECT tu FROM UserBundle:User tu')
            ->getResult();

$result = array();

foreach($users as $user){
if($user->hasRole('ROLE_CUSTOMER'))
    $result[] = $user;
}

return $this->render('XBundle:Order:index.html.twig', 
          array('users' => $result));
但是,实现同样结果的简单方法是什么

谢谢

更新,其他信息:

我们的主要问题是用户角色具有层次结构

所以,如果我在角色编辑器下定义了角色编写器,那么角色编辑器将自动拥有角色编写器


因此,我不能只使用简单的查询,我想我还必须使用安全上下文组件。

我不知道您的模式,但我想您可以做一个
内部联接
并将您的条件放在
ON
子句中。阅读以了解如何构建查询。

条令集合还有一个
过滤器
方法,该方法将
闭包作为参数。

和GregFire我们不能这样做,因为它只是比较纯文本角色,而在symfony2中,角色getter实现类似于此公共函数hasRole($role){return in_array(strtoupper($role),$this->getRoles(),true);}公共函数getRoles(){$roles=$this->roles;foreach($this->getGroups()as$group){$roles=array\u merge($roles,$group->getRoles());}//我们需要确保至少有一个角色$roles[]=静态::角色\默认值;返回数组\唯一($roles);}我的结构与FOSUserBundle相同,这个角色只是保存在用户表中一列中的序列化数组。我们的主要问题是用户角色具有层次结构。因此,如果我在角色编辑器下定义了角色编写器,角色编辑器将自动具有角色编写器。因此,我不能只使用简单的查询,但我认为我必须利用安全上下文组件。我想您可以尝试在序列化数据上使用LIKE。感谢您的帮助,但层次结构角色存储在安全上下文中,而不是序列化数据中。虽然用户在序列化数据中只有角色编辑器,但他还被授予访问角色编写器的权限。注意。