我将 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
。
有什么解决办法吗?
我设法像这样手动运行查询:
entityManager
->getConnection()
->prepare("
SELECT *
FROM table
WHERE name ~ :regex_pattern
")->execute(array(
'regex_pattern' => 'REGEX PATTERN'
))->fetch();