Все ответы до сих пор загружают дочерние категории в цикле, что, как правило, является плохой практикой и вызывает выполнение многих SQL-запросов, для которых достаточно одного.
Совершенное решение для одного запроса:
Пусть$parentCategory
будет вашей главной категорией , тогда эта коллекция загрузит все подкатегории, двумя уровнями ниже:
$subcategoryCollection = Mage::getModel('catalog/category')
->getCollection()
->addFieldToFilter('level', $parentCategory->getLevel() + 2)
->addFieldToFilter('path', ['like' => $parentCategory->getData('path') . '/%']);
Поле path
содержит идентификатор категории с префиксом всех идентификаторов предков вформа 1/2/3
.Для базы данных это столбец в catalog_category_entity
, который имеет индекс, поэтому при таком сравнении проблем с производительностью нет.