I am attempting to use PostgreSQL's NOT SIMILAR TO exclude a blacklist from the results of a query,
When I run the query in my repository method below:
$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();
I get the following error:
[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'
However, when I run this query against my local DB with PgAdmin it works.
How can I achieve this with Doctrine using the Symfony Doctrine Query builder (or similar)? I am using PostgreSQL 9.5.5
$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();