在 Symfony Doctrine 查询生成器中使用与 PostgreSQL 不同的

问题描述 投票:0回答:2

我正在尝试使用 PostgreSQL 的 NOT SIMILAR TO 从查询结果中排除黑名单,

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

$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 Doctrine 查询构建器(或类似的)通过 Doctrine 实现此目的?我正在使用 PostgreSQL 9.5.5

php postgresql symfony doctrine-orm doctrine
2个回答
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
投票

martin-georgiev/postgresql-for-doctrine
@ GitHub 添加了对
REGEXP
SIMILAR_TO
NOT_SIMILAR_TO
JSON_GET_FIELD
CONTAINS
运算符等的支持。

© www.soinside.com 2019 - 2024. All rights reserved.