$em->createQueryBuilder()
->select("MIN(m.price) AS min")
->addSelect('MAX(m.price) AS max')
->from('AppBundle:Sites', 'm');`
我怎样才能逃脱分钟才能完成这项工作?我尝试将min
别名更改为_min
,但应该有更好的方法。
我尝试了单引号和反引号,但都没有奏效。
答案 0 :(得分:2)
您无法使用min
或max
作为别名,因为DQL的当前语法根本无法使用它。您可以在section of the documentation that is defining the grammar of DQL中找到此信息。在那里你会发现以下内容:
SimpleSelectExpression ::= (...) [["AS"] AliasResultVariable]
在Identifiers中:
/* Alias ResultVariable declaration (the "total" of "COUNT(*) AS total") */
AliasResultVariable = identifier
最终,在Terminals:
标识符(名称,电子邮件,...)必须与
匹配[a-z_][a-z0-9_]*
正如您所看到的,无论如何都没有任何东西可以帮助您转义关键字。因此,当它在min
上绊倒时,Lexer会将其识别为MIN函数(请参阅this section of the code)而不是标识符,因此错误。
简而言之,您必须依赖本机查询或使用不属于保留关键字listed here的别名。
注意:Doctrine允许您按照own quoting strategy的规定实施in this post,但问题无关紧要。在这里,你的别名的问题是它被DQL解析器匹配,这在这个位置是意外的。
答案 1 :(得分:1)
使用Mysql,您可以使用反引号`min`
来转义它
使用Postgres,您可以使用双引号"min"
您可以使用minimum
之类的其他单词作为别名,以避免与数据库相关