А почему не правильно то? Все работает логично. Можешь конечно tree пакет прикрутить, что бы не писать свой велосипед
Вот этот думаю один из удобных и простых, почти ничего делать не нужно просто добавить наслодование и указать ключи родителя
https://github.com/lazychaser/laravel-nestedset
Индексы еще в базе добавь обязательно для оптимизации выборки