EC-CUBEでNULL(未入力)が最後になるようソートするのって、少し難しいですよね?

MySQLではNULLは最小の値として扱われるという仕様があり、通常rankをASCで並び替えるとNULL→1→2というようにソートされます。

一方、PostgreSQLの場合は「NULL LAST」がデフォルトですので、rankをASCで並び替えると1→2→NULLという順番でソートされます。

MySQLで昇順かつ、NULLを最後に持ってきたい時のクエリビルダはCASE文を用いて次のようになります。

            $qb
                ->addSelect('(case when p.rank IS NULL then 1 else 0 end) as HIDDEN rank_is_null ')
                ->orderBy('rank_is_null', 'ASC')
                ->addOrderBy('rank', 'ASC');;

rank_is_nullはrankがNULLの場合は1になり、NULLでない場合は0になります。
HIDDENなカラムをSELECTし、最初にorderByするのがポイントです。

これで項目がNULLの場合(=未入力)最後に持ってくるようソートができました。
CASE文が苦手が方もいると思いますが、これを期にマスターください!