Doctrine ORM:正则表达式与表达式生成器中的 DQL 函数匹配

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

我在 Doctrine ORM 中注册了一个

REGEX()
DQL 函数。

现在,我想在表达式生成器中使用该函数

$expr = $queryBuilder->expr();
$or = $expr->orX();
$or->add($expr->eq("REGEX(s.field, '[a-z]+')", true));

这对我不起作用,因为它被转换为

s0_.field :: TEXT ~ '[a-z]' = 1
,它会在 Postgres 中将布尔值与 int 进行比较时抛出:

SQLSTATE[42883]:未定义函数:7 错误:运算符不存在:布尔值 = 整数。

我还尝试使用

$or->add("s.field ~ '[a-z]+')")
避免使用 dql 函数,但 ORM 不支持
~
运算符。


我的 DQL 函数构建为

    public function getSql(SqlWalker $sqlWalker): string
    {
        return sprintf(
            '%s :: TEXT %s %s',
            $this->fieldExpression->dispatch($sqlWalker),
            '~',
            $this->patternExpression->dispatch($sqlWalker),
        );
    }
php doctrine-orm doctrine
1个回答
0
投票

将运算符替换为函数

-- nameregexeq
SELECT oprname, oprcode
FROM pg_operator
WHERE oprname = '~';

-- example
SELECT TEXTREGEXEQ('a', '[a-z]'), TEXTREGEXEQ('1', '[a-z]')
© www.soinside.com 2019 - 2024. All rights reserved.