我有以下代码
public function queryAssociationsSorted($id){
$qb = $this->createQueryBuilder('a')
->leftJoin('a.category', 'c')
->where('a.job = :id')
->setParameter('id', $id)
//->addOrderBy('c.rank', 'DESC')
//->addOrderBy('a.updated', 'DESC')
->add('orderBy','c.rank DESC THEN a.updated DESC')
;
return $query = $qb->getQuery();
}
这个或注释掉的选项都只按a.updated排序。我已经查看了有关此主题的其他帖子,但无法找到解决方案。任何人都可以建议我哪里出错了吗?
答案 0 :(得分:4)
如果我理解正确,这就是你想要的结果:
id - rank - updated
xx - 4 - 2014-01-01
xx - 3 - 2014-01-02
xx - 3 - 2014-01-01
这实际上有效:
$qb = $this->createQueryBuilder('a')
->leftJoin('a.category', 'c')
->where('a.job = :id')
->setParameter('id', $id)
->addOrderBy('c.rank', 'DESC')
->addOrderBy('a.updated', 'DESC')
;
return $query = $qb->getQuery();
答案 1 :(得分:1)
我不确定教条如何适用于多种排序..
为什么不尝试使用dql甚至原始sql查询?
http://docs.doctrine-project.org/en/2.1/reference/dql-doctrine-query-language.html
http://doctrine-orm.readthedocs.org/en/latest/reference/native-sql.html
编辑:
我觉得这样的事情会起作用:->add('orderBy','c.rank DESC, a.updated DESC')
如果你仍然没有成功,原始的SQL查询将为你节省;)
答案 2 :(得分:0)
一年后,我在this answer偶然发现了正确的答案@ red777
这将对您有所帮助:
$adapter = new DoctrineORMAdapter($queryBuilder, false);
今天早上有同样的问题。默认情况下,Pagerfanta将您的查询视为 一个加入。将第二个参数设置为false使其使用简单 查询处理。在Kunstmaan Bundle中,在AdminListConfiguration类中,您必须这样做 如果你想要排序,那么正在创建Pagerfanta的功能 简单的实体。
查询中的语法始终是正确的,但是DoctrineOrmAdapter中出现了错误。添加false作为第二个参数对问题进行排序