Я думаю, что вот эта строка:
if($row->parent_category_id != 0) {
$text .= " ";
}
должно быть:
while ($depth-- > 0) {
$text .= " ";
}
Вы делаете отступ только один раз, а не количество отступов.
И эта строка:
$this->get_tree($nextQuery, ++$depth, $row);
должно быть:
$this->get_tree($nextQuery, $depth + 1, $row);
Обратите внимание, что вам, вероятно, следует следовать совету, приведенному в другом ответе, и захватить всю таблицу сразу, а затем обработать ее сразу, потому что в целом вы хотите минимизировать количество обращений к базе данных (есть несколько используйте случаи, когда ваш способ работы более оптимален, например, если у вас очень большое дерево, и вы выбираете небольшую его часть, но я сомневаюсь, что это так)