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
中的多个参数