Как часть решения для электронной коммерции, над которым мы работаем, CMS имеет возможность для категорий продуктов иметь неограниченное количество подкатегорий, и каждая подкатегория может иметь неограниченное количество подкатегорий. По сути, существует неограниченный уровень вложенности для категорий товаров.
Схема таблицы базы данных для категорий выглядит примерно так:
+-------------+-----------------+----------------+
| category_id | name | parent_id |
+-------------+-----------------+----------------+
| 1 | Parent 1 | null |
| 2 | Child of Parent | 1 |
+-------------+-----------------+----------------+
Мы хотим добавить навигационную цепочку для каждого уровня навигации по категориям, поэтому мой вопрос: как лучше всего перебирать категории, пока есть назначенный родитель, пока он не достигнет верхнего уровня?
Очевидно, мы можем закодировать его в фиксированном цикле (например, if($child->hasParent()) { echo '1'; if($child->children->hasParent() { } }
и т. д.
Как вы перебираете неизвестное количество категорий, пока не достигнете категории верхнего уровня (то есть категории, которой не назначено parent_id
?