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 查询生成器

如何在 Doctrine 查询生成器中进行多个 WHERE IN 列查询?

如何使用doctrine查询生成器编写此sql查询?

Doctrine2 自我参考查询——不起作用

Symfony Doctrine查询生成器。如何在没有连接的情况下选择多对一字段的值?

Doctrine 2. 自动生成代理