2

我正在尝试过滤掉具有超级管理员角色的管理员。为什么以下不起作用?

public function findAdmins()
{
    $qb = $this->getEntityManager()->createQueryBuilder();
    $qb
        ->select('a')
        ->from('MyBundle:Admin', 'a')
        ->where($qb->expr()->notIn('ROLE_SUPER_ADMIN', 'a.roles'));

    $result = $qb->getQuery()->execute();

    return $result;
}

它会给我以下错误:

[Syntax Error] line 0, col 68: Error: Expected Literal, got 'a' 

DQL 查询如下所示:

SELECT a FROM MyBundle:Admin a WHERE ROLE_SUPER_ADMIN NOT IN(a.roles)  

角色本身不是一个实体。它只是一个字符串数组。

$roles = array('ROLE_ADMIN', 'ROLE_SUPER_ADMIN)'
4

2 回答 2

2

尝试使用MEMBER OF运算符

$qb
->select('a')
->from('MyBundle:Admin', 'a')
->where(':role NOT MEMBER OF ad.roles')->setParamete('role', 'ROLE_SUPER_ADMIN');

更新。 找到的唯一解决方案是检查 db 中的序列化字符串LIKE详情在这里

于 2013-07-29T06:24:49.217 回答
0

不要column nametable name

尝试这个,

$qb
    ->select('a')
    ->from('MyBundle:Admin', 'ad')
    ->where($qb->expr()->notIn('ROLE_SUPER_ADMIN', 'ad.roles'));

应该是这样的,

SELECT a FROM MyBundle:Admin ad WHERE ROLE_SUPER_ADMIN NOT IN(ad.roles)  
于 2013-07-29T04:40:28.583 回答