Symfony3 / Doctrine: ORDER BY CASE / Сначала определенное значение - PullRequest
0 голосов
/ 16 октября 2018

Я ищу решение для заказа моего запроса с помощью построителя запросов.

Я хочу упорядочить свой запрос по 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");

Возможно ли сделать что-то подобное прямо в orderBy QueryBuilder (Doctrine)?

Спасибо за ваш ответ

--- РЕДАКТИРОВАТЬ ---

Я обнаружил проблему, она появилась из опции '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 голосов
/ 16 октября 2018

Вы можете добавить несколько заказов следующим образом:

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

... и так далее.Вам нужно будет решить, будет ли это Ascending ASC или Descending DESC.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...