原则:在字段别名中使用短划线

时间:2017-07-13 12:30:14

标签: sql symfony syntax doctrine-orm

此MySql指令有效select id "object-id" from object

我如何对Doctrine做同样的事情?我的所有测试都返回了语法错误。

$result = $this->em->createQuery(
                   'SELECT o.id \'object-id\'
                    FROM MyBundle:Object o')
               ->getArrayResult();

2 个答案:

答案 0 :(得分:2)

this issue's answer中所述:

  

这不起作用,因为persister使用列名作为查询的AS部分。我们不会以编程方式解决这个问题,这是对Doctrine 2的限制。

     

出于这个原因,我更新了文档,指出不应该使用非a-zA-Z0-9_字符(甚至引用)作为列。

所以你不应该在这里使用破折号。

答案 1 :(得分:1)

Consulting the context-free grammar DQL不支持您的语法。

SelectClause定义:

SelectClause ::= "SELECT" ["DISTINCT"] SelectExpression {"," SelectExpression}*

SelectExpression定义(最后见AliasResultVariable):

SelectExpression ::= (IdentificationVariable | ScalarExpression | AggregateExpression | FunctionDeclaration | PartialObjectExpression | "(" Subselect ")" | CaseExpression | NewObjectExpression) [["AS"] ["HIDDEN"] AliasResultVariable]

AliasResultVariable定义:

/* Alias ResultVariable declaration (the "total" of "COUNT(*) AS total") */
AliasResultVariable = identifier

identifier定义:

must match [a-z_][a-z0-9_]*

因此,您的案例中的正确语法应为:

$result = $this->em
    ->createQuery('SELECT o.id AS object_id FROM MyBundle:Object o')
    ->getArrayResult();