2017-02-16 10 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 он работает.

Как я могу достичь этого с помощью Доктрины, использующей построитель Query Symfony Doctrine Query (или аналогичный)? Я использую 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