【发布时间】: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();
},
))
希望对你们中的一些人有所帮助:)
【问题讨论】:
-
Hy Mate,重复的问题,请参阅此链接。 stackoverflow.com/questions/25656883/…
-
感谢您的回答,但我正在寻找教义的解决方案,我知道如何使用 SQL 来做到这一点,但我不明白如何使用教义来做到这一点