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
Вот так простенько и функционально.