スーパー管理者の役割を持つ管理者を除外しようとしています。以下が機能しないのはなぜですか?
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)'