Php 使用PostgreSQL与Symfony条令查询生成器中的不同

Php 使用PostgreSQL与Symfony条令查询生成器中的不同,php,postgresql,symfony,doctrine-orm,doctrine,Php,Postgresql,Symfony,Doctrine Orm,Doctrine,我试图使用PostgreSQL的从查询结果中排除黑名单 当我在我的存储库方法中运行以下查询时: $qb = $this->getEntityManager()->createQueryBuilder('p'); $query = $qb ->select('p') ->from('CRMPiccoBundle:Person', 'p') ->where("lower(p.email) not similar to '(" . implode

我试图使用PostgreSQL的从查询结果中排除黑名单

当我在我的存储库方法中运行以下查询时:

$qb = $this->getEntityManager()->createQueryBuilder('p');

$query = $qb
    ->select('p')
    ->from('CRMPiccoBundle:Person', 'p')
    ->where("lower(p.email) not similar to '(" . implode('|', $blacklist) . ")%'")
    ->getQuery();

return $query->getResult();
我得到以下错误:

[Doctrine\ORM\Query\QueryException]                                                                                                                
SELECT p FROM CRMPiccoBundle:Person p WHERE lower(p.email) not similar to '(abuse@|admin@|billing@|compliance@|devnull@)%' 

[Doctrine\ORM\Query\QueryException]                                     
[Syntax Error] line 0, col 94: Error: Expected end of string, got 'to'  
但是,当我使用PgAdmin对本地数据库运行此查询时,它会正常工作


如何使用Symfony条令查询生成器(或类似工具)通过条令实现这一点?我正在使用PostgreSQL 9.5.5

@crmpicco感谢您的编辑,我没有注意到这一点,因为我只编写了代码而没有进行测试:谢谢您的回答,我没有想到将
排列成那样。当我看到你的答案时,这很有道理。
$qb = $this->getEntityManager()->createQueryBuilder('p');

$select = $qb
    ->select('p')
    ->from('CRMPiccoBundle:Person', 'p')
;

foreach ($blacklist as $key => $item) {
    $select
        ->where('lower(p.email) NOT LIKE :key'.$key)
        ->setParameter('key'.$key, "$item%")
    ;
}

$query = $select->getQuery();

return $query->getResult();