Concat三个或更多领域的学说

时间:2014-03-04 10:29:07

标签: symfony doctrine-orm

Doctrine查询构建器允许我仅连接两个字段。

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

连接我使用的3个字段:

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

SQL将是:

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

如何获得一个 concat?

当我尝试直接打电话时

new Expr\Func('CONCAT', array('table.field1', 'table.field2', 'table.field3'));

执行查询会给我一个错误

  

[语法错误]第0行,第237行:错误:预期的Doctrine \ ORM \ Query \ Lexer :: T_CLOSE_PARENTHESIS,得到','

转储DQL:

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

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

  

[语法错误]第0行,第237行:错误:预期的Doctrine \ ORM \ Query \ Lexer :: T_CLOSE_PARENTHESIS,得到','

1 个答案:

答案 0 :(得分:1)

Doctrine ORM version 2.4.0中引入了带有可变数量参数的

CONCAT,因此您可能正在使用旧版本。我已经在我的项目中测试了类似的DQL并按预期工作。

您应该使用以下命令升级您的Doctrine ORM deps:

php composer.phar require doctrine/orm:~2.4

注意(目前)变量参数仅由Expr\Func构造函数支持,但Expr::concat方法不支持;你仍然需要这种语法:

new Expr\Func('CONCAT', array('table.field1', 'table.field2', 'table.field3'));

更新我已创建PR on GitHub以支持Expr::concat

中的多个参数