Doctrine 2 查询生成器 abs 函数
Posted
技术标签:
【中文标题】Doctrine 2 查询生成器 abs 函数【英文标题】:Doctrine 2 Query Builder abs Function 【发布时间】:2011-09-23 17:43:23 【问题描述】:这项工作:
$qb = $this->em->createQueryBuilder();
$qb->select("abs(u.code) as code")
->from("User", "u")
->orderBy("code","ASC")
->getQuery()
->getArrayResult();
这不起作用:
$qb = $this->em->createQueryBuilder();
$qb->select("u.code")
->from("User", "u")
->orderBy("abs(u.code)","ASC")
->getQuery()
->getArrayResult();
错误:
语法错误] line 0, col 118: Error: Expected end of string, got '('
本机教义函数 abs 仅适用于语句的选定部分,并且 不要按部分顺序工作。
观察:
1-) 我避免使用 NativeQuery。
2-) u.code 是 mysql 上的 varchar 字段,需要是 varchar(有时是数字,有时是字符串),我需要像数字大小写的数字一样排序。
有什么帮助吗?
【问题讨论】:
但是在 ->getArrayResult(); 上抛出了一个异常;在学说 api 中 我认为您在ORDER BY
中的表达式有错误。试试$qb->select("u.code, abs(u.code) as abs_code") ->from("User", "u") ->orderBy("abs_code","ASC") ->getQuery() ->getArrayResult();
这项工作我已经尝试过了,但我的系统结构正在等待 select 上的完整对象,如下所示:$qb->select("u"),如果我指定一个字段 struct ..puf !!
所以使用$qb->select("u.*, abs(u.code) as abs_code")
Doctrine 解析器有时是@#!dd 看看错误:[Semantical Error] line 0, col 9 near ',s.,t.*,w.* ,abs(p.reference)': Error: Class Entity\Property has no field or association named *
【参考方案1】:
解决了 atma 感谢的 abs()
真的不能直接在 orderBy 中工作,而是作为别名。
解决方案
SELECT field1,field2,abs(field3) AS abs_field3
FROM table
ORDER BY abs_field3 ASC
Obs:这是一个学说限制,不是 mysql 限制,mysql 支持 abs direct on order by part。
【讨论】:
【参考方案2】:在 7 年不活动之后可能有点晚,但也许它可以帮助某人。 解决方案在这里找到: Doctine
$qb = $this->em->createQueryBuilder();
$qb->select("u.code")
->from("User", "u")
->orderBy(
$qb->expr()->andX(
$qb->expr()->abs('u.code'), "ASC"
)
)
->getQuery()
->getArrayResult()
;
【讨论】:
以上是关于Doctrine 2 查询生成器 abs 函数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Doctrine 查询生成器中进行多个 WHERE IN 列查询?