Doctrine 2: сортировка с упорядочиванием NULL в конце (sort null orderby)

Иногда возникает необходимость отсортировать таблицу по определенному полю и, при этом, чтобы значение NULL находилось в самом конце.

Речь пойдет о Doctrine 2.

Кстати, в MySQL отсортировать значения можно так:

SELECT * FROM test ORDER BY -parent_id DESC

А как же сделать все-таки сортировку с помощью Doctrine 2?

Вот собственно пример функции из Symfony:

public function findAllJoinedToGroup()
{
    return $this->createQueryBuilder('r')
        ->leftJoin('r.group', 'g')
        ->addSelect('g')
        ->addSelect('CASE WHEN r.group IS NULL THEN 1 ELSE 0 END as HIDDEN priority_is_null')
        ->addOrderBy('priority_is_null')
        ->addOrderBy('r.group')
        ->addOrderBy('r.name')
        ->getQuery()
        ->getResult();
}

В данной функции нам интересна одна строка:

CASE WHEN r.group IS NULL THEN 1 ELSE 0 END as HIDDEN priority_is_null

Далее мы просто выполняем orderby по полю priority_is_null

Вот так простенько и функционально.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: