我正在尝试过滤掉具有超级管理员角色的管理员。为什么以下不起作用?
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)'
答案 0 :(得分:2)
尝试使用MEMBER OF
运算符
$qb
->select('a')
->from('MyBundle:Admin', 'a')
->where(':role NOT MEMBER OF ad.roles')->setParamete('role', 'ROLE_SUPER_ADMIN');
<强>更新强>
找到的唯一解决方案是使用LIKE
检查db中的序列化字符串。 Details here
答案 1 :(得分:0)
请勿将column name
与table 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)