Michael Agbenyegah April 7, 2020
Assuming I am attempting to fetch data from a table which contains course modules, with a custom field for course ordering which defaults null.
$query = $this->createQueryBuilder('m') ->addOrderBy('m.listOrder','ASC');
The result of this query will be sorted as defined. However our rows with null
entries will appear first before the other rows.
In order to make those entries follow the non-null entries from the bottom we add a select and create a hidden variable to handle the null values.
$query = $this->createQueryBuilder('m') ->addSelect('CASE WHEN m.listOrder IS NULL THEN 1 ELSE 0 END as HIDDEN list_order_is_null') ->addOrderBy('list_order_is_null','ASC') // always ASC ->addOrderBy('m.listOrder','ASC'); //DESC or ASC