Там, я так понимаю, примерно дублируется код шаблона. Тогда запрос инициируется вот этой проверкой: @if (count($item->children) > 0)
Вы в контроллере грузите детей, а потом в цикле проверяете наличие детей у этих детей.
Если у вас только два уровня вложенности, передавайте в паршиал флаг, что это последний уровень или вообще уберите оттуда итерирование по детям.
Если вложенность неограниченная, то при такой структуре данных загрузить всё стандартным функционалом не выйдет.
Но можно указать столько уровней, сколько есть обычно: BookCategory::with('children.children.children').
Или выбирать все категории плоским списком, а дерево строить рекурсивно уже в контроллере.
Ну а лучше совсем поменять структуру хранения и использовать, например, nested set.
Евгений, ну, само по себе множественное подключение файла с функциями я не считаю большой проблемой. Да и, учитывая уровень вопроса, рекомендовать автору провести операцию вместо лечения симптомов рановато.