【问题标题】:Symfony3/Doctrine : ORDER BY CASE / Specific value firstSymfony3/Doctrine : ORDER BY CASE / 具体值优先
【发布时间】:2018-10-16 08:36:49
【问题描述】:

我正在寻找使用查询生成器订购我的查询的解决方案。

我想通过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();
                },
        ))

希望对你们中的一些人有所帮助:)

【问题讨论】:

标签: php sql symfony doctrine


【解决方案1】:

你可以这样添加多个订单,

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

...等等。您需要决定是升序ASC 还是降序DESC

希望这会有所帮助。

【讨论】:

  • @ErwinSmout 不是吗?反正就看他到底是什么意思了。我会相应地改变我的答案。谢谢你的朋友。
  • 您好,感谢您的回复。 A,B,c ...不是表格,例如代表少量数据的示例,但无论如何,我解决了问题。这来自我表单中的“group_by”,我编辑我的问题以回答:)
  • @Zayders 别担心 :)
猜你喜欢
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多