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,得到','
答案 0 :(得分:1)
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