рекурсивная функция с использованием объекта Joomla DB - PullRequest
0 голосов
/ 12 августа 2011

Я хочу написать рекурсивную функцию в joomla, которая получает все категории дочернего уровня с использованием идентификатора категории, используя объект db joomla's jmodel. Следующий код, который я написал:

    function getChildCategories($type){
            $query = "SELECT id FROM #__cd_categories WHERE parent_id='$type'";
            echo $query."<br/>"; 
            $this->_db->setQuery($query);
            $list = $this->_db->loadObjectList(); 
            if ($this->_db->getErrorNum()) { echo $this->_db->stderr(); return false; }       
            foreach($list as $record){
               $this->childCategories[]= $record->id;
               echo $record->id."<br/>";
               return $this->getChildCategories($record->id);
            }

        return true;            
    }

Итак, проблема в том, что в joomla мы используем метод $ this -> _ db_setQuery и метод $ this -> _ db-> loadObjectList, поэтому при рекурсивном вызове набор результатов, я думаю, перезаписывается, я думаю, потому что объект такой же , Так кто-нибудь может сказать, как, как преодолеть эту проблему? Если вы можете решить эту проблему с помощью цикла, это также будет очень полезно для меня.

Я также думаю, что если значения присвоены переменной $ list, то перезапись не должна быть проблемой. Так что странно. Скажите, пожалуйста, кто-нибудь может подсказать мне, как это сделать?

спасибо заранее

1 Ответ

1 голос
/ 12 августа 2011

Не думаю, что проблема в том, что объект базы данных перезаписывается. Прошло немного времени с тех пор, как я боролся с рекурсивными функциями, но я думаю, что проблема заключается в присвоении переменной $ list.

Если вы не возвращаете эту переменную вместо логического true, как это:

function getChildCategories($type) {
        $query = "SELECT id FROM #__cd_categories WHERE parent_id='$type'";

        $this->_db->setQuery($query);
        $list = $this->_db->loadObjectList(); 
        if ($this->_db->getErrorNum()) { echo $this->_db->stderr(); return false; }  
        if ($list) {
            foreach($list as $record){
               $list->childCategories = $this->getChildCategories($record->id);
            }
            return $list;
        } else {
            return;
        }

}
...