2017-02-16 2 views
1

ich PostgreSQL zu verwenden, ist versucht NOT SIMILAR TO ausschließt eine schwarze Liste aus den Ergebnissen einer Abfrage,Verwenden PostgreSQL keine Ähnlichkeit in Symfony Lehre Query Builder

Wenn ich die Abfrage in meinem Repository Verfahren laufe unter:

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

bekomme ich folgende Fehlermeldung:

[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' 

jedoch, wenn ich diese Abfrage ausführen gegen meine lokalen D B mit PgAdmin funktioniert.

Wie kann ich dies mit Doctrine mithilfe des Symfony Doctrine Query Builder (oder ähnlich) erreichen? Ich bin mit PostgreSQL 9.5.5

Antwort

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 Dank für die Bearbeitung, ich habe nicht auf dem Auge behalten, weil ich nur den Code ohne Prüfung schreiben: D –

+0

Danke für die Antwort, habe ich nicht Denke darüber nach, die 'NOT LIKE's so aufzustellen. Es macht Sinn, wenn ich deine Antwort gesehen habe. – crmpicco