Получение предков категории

#php #database #codeigniter

#php #База данных #codeigniter

Вопрос:

Я пытаюсь получить список предков определенной категории.

Сначала у меня есть идентификатор категории для начала текущей категории.

МОЯ таблица БД категорий:

 ID NAME PARENT
1  Cars 0
2  Saloons 1
3  Wagons 1
4  Family 2
  

Я пытаюсь вернуть этот список

Cars Saloons Family, только зная идентификатор дочернего элемента

Используя ActiveRecord и Codeignighter, я придумал это в своей модели

 public function get_ancestors( $category_id = 0 , amp;$parentcategory=null)
{
    $category = $this->get('id',$category_id);

    if($parentcategory)$category->parent =$parentcategory;

    if($category)
    {
        if($category->parent_id > 0)
        {
            return $this->get_ancestors($category->parent_id, $category );
        }

        return $category;
    }

    return array();
}               
  

Я не уверен, что я сделал неправильно (см. Результат ниже)

 array (size=1)
  0 => 
    object(stdClass)[144]
      public 'id' => string '4' (length=2)
      public 'name' => string 'Family' (length=5)
  

Более или менее ожидая чего-то вроде

 array (size=1)
  0 => 
    object(stdClass)[144]
      public 'id' => string '4' (length=2)
      public 'name' => string 'Family' (length=5)
      public 'parent' => array (size=1)
      0 => 
        object(stdClass)[144]
          public 'id' => string '2' (length=2)
          public 'name' => string 'Saloon' (length=5)
          public 'parent' => array (size=1)...
  

Ответ №1:

Вы должны передавать $tree по ссылке.

 public function get_ancestors( $category_id = 0 , amp;$tree = array()  )
  

Обратите amp; внимание на строку выше.

Комментарии:

1. Вы должны решить, возвращаете ли вы результат или изменяете значение, переданное по ссылке. Выполнение обоих только запутает вас.