如何通过PostgreSQL ~操作符扩展Doctrine 2?(不是自定义函数)

apeeds0o  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(92)

我使用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();

我已经找到了this example和官方文档。然而,它们只科普 * 自定义函数 *。但是我不需要一个计算为某个值的函数(或项),而是一个 * 自定义 predicate *。即使我创建了一个自定义的DQL函数--比如REGEXP--并带有两个在SQL级别转换为~的参数,DQL解析器仍然需要一个运算符。因此,单独使用WHERE REGEXP( a, b )会产生DQL解析错误,而WHERE REGEXP( a, b ) = true会满足DQL解析器的要求,但会在SQL级别上转换为疯狂的WHERE a ~ b = TRUE
有什么办法吗?

b1payxdu

b1payxdu1#

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

entityManager
  ->getConnection()
  ->prepare("
      SELECT *
      FROM table
      WHERE name ~ :regex_pattern
  ")->execute(array(
    'regex_pattern' => 'REGEX PATTERN'
  ))->fetch();

相关问题