Рекурсивная функция для создания массива - PullRequest
0 голосов
/ 14 июня 2010

Я использую фреймворк Kohana и пытаюсь создать рекурсивную функцию для создания дерева категорий.

Таблица моих категорий

id      int(11)     NO  PRI     NULL    auto_increment
name    varchar(50)     NO      NULL     
parent_id   int(11)     NO      NULL     
projects_count  int(11)     NO      NULL     

Мой пример, который не работает

public static function category_list($parent_id = 0)
{
    $result =  Database::instance()->query('
        SELECT name, projects_count 
        FROM project_categories
        WHERE parent_id = ?', 
        array($parent_id)
    );

    $project_categories = array();
    foreach($result as $row)
    {
        $project_categories[] = $row;

        Project_Categories_Model::factory()->category_list($parent_id + 1);
    }

    return $project_categories;
}

1 Ответ

1 голос
/ 14 июня 2010

Использование такого рода иерархической реализации данных крайне неоптимально, потому что для получения каждой подкатегории вам нужно выполнить отдельный запрос к базе данных. Как и здесь, вы хотите создать функцию рекурсии.

Если вы все еще можете изменить архитектуру таблицы, отметьте Управление иерархическими данными в MySQL .

В этой статье описывается решение, как извлечь всю иерархию в одном запросе времени, поэтому рекурсивная функция не понадобится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...