Symfony3 / Doctrine:按案例排序/特定值在前

时间:2018-10-16 08:36:50

标签: php sql symfony doctrine

我正在搜索一种解决方案,以通过查询生成器对查询进行排序。

我想按ASC排序查询,但首先要指定一个特定值。 我知道如何在SQL with order by case中进行此操作...但是我发现很少有不能真正适用于该学说的解决方案。

例如:我有一张桌子,上面有:A,B,D,C,F,E。

我想这样排序:F,A,B,C,D,E

我在其他主题中发现了类似的内容,但对我而言不起作用:

$qb->addSelect("(CASE When c.type like 'foo%' Then 1 WHEN c.type like 'foo1%' THEN 1 ELSE 0 END) AS HIDDEN type");

是否可以直接在QueryBuilder(Doctrine)的orderBy中执行类似的操作?

感谢您的答复

---编辑---

我发现了问题,它来自表单中的“ group_by”选项。 这是我存储库中的函数:

public function findBolQB($username)
    {
        return $this
                ->createQueryBuilder('p')
                ->innerJoin('p.program','prg')
                ->innerJoin('prg.bol','b')
                ->innerJoin('prg.user','user')
                ->innerJoin('p.part','part')
                ->addSelect("(CASE When user.username like :name Then 0 ELSE 1 END) AS HIDDEN userChancla")
                    ->setParameter(':name', $username)
                ->orderBy('userChancla')
                ->addOrderBy('b.code','ASC')
                ->addOrderBy('part.name','ASC');

    }

别忘了orderBy('userChancla')否则将无法正常工作!

该列表用于表单中,并且按用户分组,因此在我的表单构建器中,我的代码是:

->add('bolEnBois', EntityType::class, array(
            'class' => 'IssouChanclaBundle:Bol',
            'placeholder' =>'--- Bol---',
            'required' => false,
            'attr'=>array('class'=>'select2'),
            'query_builder' => function(BolRepository $a)use($options)
                {
                    return $a->findBolQB($options['user']);
                },
            'group_by' => function(Bol $bol)
                {
                    return $bol->getUser()->getFirstName().' '.$article->getUser()->getLastName();
                },
        ))

希望对您有些帮助:)

1 个答案:

答案 0 :(得分:0)

您可以这样添加多个订单

 $qb->addOrderBy('A', 'DESC')
    ->addOrderBy('B', 'DESC')
    ->addOrderBy('C', 'DESC');

...等等。您将需要确定它是升序ASC还是降序DESC

希望这会有所帮助。