在教义中连接三个或更多领域



Doctrine 查询生成器只允许我连接两个字段。

class Expr {
// ...
public function concat($x, $y); // Returns ExprFunc

为了连接 3 个字段,我使用:

$qb->expr()->concat(
    'table.field1',
    $qb->expr()->concat('table.field2', 'table.field3')
);

SQL将是:

CONCAT('table.field1', CONCAT('table.field2', 'table.field3'))

如何获得一个连接?

当我尝试直接打电话时

new ExprFunc('CONCAT', array('table.field1', 'table.field2', 'table.field3'));

执行查询给我一个错误

[语法错误] 第 0 行,第 237 行:错误:预期原则\ORM\查询\词法分析器::T_CLOSE_PARENTHESIS,得到 ','

倾倒 DQL:

CONCAT('table.field1', 'table.field2', 'table.field3')

使用 $qb->getQuery()->getSQL()转储 SQL:

[语法错误] 第 0 行,第 237 行:错误:预期原则\ORM\查询\词法分析器::T_CLOSE_PARENTHESIS,得到 ','

Doctrine ORM 版本 2.4.0 中引入了具有可变参数数量的CONCAT,因此您可能使用的是旧版本。我已经在我的项目中测试了类似的 DQL,并按预期工作。

您应该通过以下方式升级您的教义ORM部门:

php composer.phar require doctrine/orm:~2.4

请注意,(目前)变量参数仅受构造函数ExprFunc支持,但在Expr::concat方法中不受支持;您仍然需要以下语法:

new ExprFunc('CONCAT', array('table.field1', 'table.field2', 'table.field3'));

更新我在 GitHub 上创建了一个 PR 以支持Expr::concat中的多个参数

相关内容

  • 没有找到相关文章

最新更新