Для построения дерева буду использовать рекурсию. По умолчанию дерево начинает строится с категорий значение parent_id
которых равняется null
, но при необходимости, можно исправить и на ноль. Соответственно, если нам нужно построить полное дерево, вызываем метод без аргументов, иначе указываем id
категории.
protected function tree($id = null, $start = true)
{
if($id){
// Делаем выбору дочерних категорий из базы данных
$arr = db()->fetchAll('SELECT * FROM `blogs_categories` WHERE `parent_id` = :p', ['p' => $id], __CLASS__);
}else{
$arr = db()->fetchAll('SELECT * FROM `blogs_categories` WHERE `parent_id` IS NULL ', [], __CLASS__);
}
// Перебираем их и делаем рекурсивный запрос
foreach($arr as &$i){
$i->children = $this->tree($i->id);
}
// Возвращаем результат
return $arr;
}