如何通过 PostgreSQL ~ 运算符扩展 Doctrine2? (不是自定义函数)

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

我将 Symfony 和 Doctrine 与 PostgreSQL 后端一起使用,我想使用 PostgreSQL

~
运算符来获得 POSIX 正则表达式的全部功能,而不是受限制的
LIKE

我想写这样的东西

entityManager->createQuery(
        'SELECT e FROM MyBundle:Entity e WHERE e.name ~ :name'
    )->setParameters(
        array( "name" => "some regex here" )
    )->getResult();

我已经找到了这个例子官方文档。然而它们只处理自定义函数。但我不需要一个计算某个值的函数(或术语),而是一个自定义谓词。 即使我创建了一个自定义 DQL 函数(例如

REGEXP
),其中两个参数在 SQL 级别转换为
~
,那么 DQL 解析器仍然需要一个运算符。因此,单独使用
WHERE REGEXP( a, b )
会产生 DQL 解析错误,而
WHERE REGEXP( a, b ) = true
会满足 DQL 解析器的要求,但会在 SQL 级别上转换为疯狂的
WHERE a ~ b = TRUE

有什么解决办法吗?

postgresql doctrine-orm abstract-syntax-tree lexer
1个回答
0
投票

我设法像这样手动运行查询:

entityManager
  ->getConnection()
  ->prepare("
      SELECT *
      FROM table
      WHERE name ~ :regex_pattern
  ")->execute(array(
    'regex_pattern' => 'REGEX PATTERN'
  ))->fetch();
© www.soinside.com 2019 - 2024. All rights reserved.