Если используете PostgreSQL, посмотрите в сторону
рекурсивных подзапросов.
Если это не PostgreSQL, то можете попробовать строить дерево из "сырых данных" непосредственно в PHP (как подсказывает Вам
ThunderCat ).
Но вообще лично я бы для начала оценил частоту изменений категорий в каталоге и общее количество категорий (объем данных), и в соответствии с этой информацией выбрал более подходящую
модель хранения деревьев в БД.
Таких основных моделей
четыре: Adjacency list, Nested Sets, Materialized Path и Closure Tables (можно рассматривать как развитие Adjacency List) плюс их вариации.
Каждый тип модели может послужить для оптимизации выборки данных из древовидных структур в БД.
Присутствуют готовые библиотеки и для Laravel:
Nested SetClosure Tables
Для Adjacency List (вашей текущей реализации), просто сортируйте данные самостоятельно, либо попробуйте
этот пакет.