Symfony2 - 查询生成器多个orderBy

时间:2014-09-02 12:14:40

标签: symfony doctrine-orm query-builder

我有以下代码

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排序。我已经查看了有关此主题的其他帖子,但无法找到解决方案。任何人都可以建议我哪里出错了吗?

3 个答案:

答案 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作为第二个参数对问题进行排序