Symfony FosUserBundle仅显示角色==角色\用户的用户

Symfony FosUserBundle仅显示角色==角色\用户的用户,symfony,orm,doctrine,fosuserbundle,Symfony,Orm,Doctrine,Fosuserbundle,我正在尝试获取唯一具有角色的用户\u user 我的控制器中有: $query = $this->getDoctrine()->getEntityManager() ->createQuery( 'SELECT u FROM StageUserBundle:User u WHERE u.roles LIKE :role' )->setParameter('role', '%"ROLE_USER"%' ); $users = $query->getR

我正在尝试获取唯一具有
角色的用户\u user

我的控制器中有:

$query = $this->getDoctrine()->getEntityManager()
->createQuery(
        'SELECT u FROM StageUserBundle:User u WHERE u.roles LIKE :role'
)->setParameter('role', '%"ROLE_USER"%' 
);
$users = $query->getResult();

它使用的是
ROLE\u ADMIN
而不是
ROLE\u USER
,但是我只需要显示
USER.getRoles()==“ROLE\u USER”
,您的问题是FOSUserBundle中的用户模型实际上从来没有
ROLE\u USER

FOS\UserBundle\Model\UserInterface

FOS\UserBundle\Model\User

当您
getRoles
时,它会添加
ROLE\u用户
作为默认值,当您
addRole
时,它会检查角色是否为
ROLE\u用户
,如果是,则跳过


实际上,您系统上的每个用户都将拥有
角色\u user
,因此要查找具有该角色的所有用户,您只需执行
从StageUserBundle中选择u即可。用户名:user u
我找到了问题的解决方案。 我在控制器中更改了此选项:

$query = $this->getDoctrine()->getEntityManager()
    ->createQuery('SELECT u FROM StageUserBundle:User u WHERE NOT u.roles LIKE :role'
    )->setParameter('role', '%"ROLE_ADMIN"%' );

    $users = $query->getResult();
希望这会有所帮助

public function addRole($role)
{
    $role = strtoupper($role);
    if ($role === static::ROLE_DEFAULT) {
        return $this;
    }

    if (!in_array($role, $this->roles, true)) {
        $this->roles[] = $role;
    }

    return $this;
}

....

public function getRoles()
{
    $roles = $this->roles;

    foreach ($this->getGroups() as $group) {
        $roles = array_merge($roles, $group->getRoles());
    }

    // we need to make sure to have at least one role
    $roles[] = static::ROLE_DEFAULT;

    return array_unique($roles);
}
$query = $this->getDoctrine()->getEntityManager()
    ->createQuery('SELECT u FROM StageUserBundle:User u WHERE NOT u.roles LIKE :role'
    )->setParameter('role', '%"ROLE_ADMIN"%' );

    $users = $query->getResult();