2017-02-16 53 views
1

我试图使用PostgreSQL的NOT SIMILAR TO排除从查询结果的黑名单,使用PostgreSQL没有类似的Symfony的学说查询生成器

当我跑在我的下面库方法查询:

$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 '([email protected]|[email protected]|[email protected]|[email protected]|[email protected])%' 

[Doctrine\ORM\Query\QueryException]          
[Syntax Error] line 0, col 94: Error: Expected end of string, got 'to' 

然而,当我跑对我的地方d此查询B与PgAdmin它的作品。

我如何使用学说的思想学说的Symfony查询生成器(或类似)实现这一目标?我使用PostgreSQL 9.5.5

回答

1
$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(); 
+0

@crmpicco感谢您的编辑,我不留意的是,因为我只写代码,而测试:d –

+0

感谢您的回答,我没有想想排队这样的'不喜欢'。当我看到你的答案时,它是非常有意义的。 – crmpicco