Как лучше с исключением поступить?
И себе всё запиши, и пользователю скажи что он что-то не то искать пытается
while(!$rows = parent::findAll()){
    throw new \Exception('Нет категорий');
}
return $rows;
может лучшеif (($rows = parent::findAll()) === false);
    throw new \Exception('Нет категорий');
}
return $rows;
Покажите юзеру нормальное сообщение что категорий нет. В конкретно этом случае, я думаю Вам все равно нашлись какие-то категории по запросу пользователя или нет.