Рекурсивные сценарии не полностью обходят базу данных для дочерних записей в CodeIgniter.Php

Кемеровские программисты php общаются здесь
Anonymous
Рекурсивные сценарии не полностью обходят базу данных для дочерних записей в CodeIgniter.

Сообщение Anonymous »

По сути, мне нужно создать древовидную структуру из категорий и их дочерних элементов. Для этой цели я попытался сделать это рекурсивным методом следующим образом:

Код: Выделить всё

public function getCategoriesTree($idRootCategory = null)
{
$this->db->select("gc.*");
$this->db->from('glami_categories gc');
$this->db->where('CATEGORY_PARENT_ID', $idRootCategory);

$categories = array();

foreach ($this->db->get()->result_array() as $item) {
$children = [];
$subcats = $this->getChildren($children, $item['CATEGORY_ID']);
$item['children'] = $subcats;

$categories[] = $item;
}
return $categories;
}

private function getChildren(&$children, $parent_id)
{
if (!$parent_id) {
return $children;
}
$subcats = $this->db
->select("*")
->from('glami_categories')
->where('CATEGORY_PARENT_ID', $parent_id)
->get()
->result_array();
if ($subcats) {
if (isset($children[$parent_id])) {
$children[$parent_id]['children'][$subcats[0]['CATEGORY_ID']] = $subcats[0];
} else {
$children[$subcats[0]['CATEGORY_ID']] = $subcats[0];
}
foreach ($subcats as $subcat) {
$paretn_sequence[] = $parent_id;
return $this->getChildren($children, $subcat["CATEGORY_ID"]);
}
}
return $children;
}
Но таким образом я добираюсь до уровня 2 дерева категорий и даже не до всех записей. Другими словами, это происходит довольно грязно. В целях тестирования я загружу сюда всю таблицу (поскольку в ней более 700 строк и вставка ее в тело вопроса будет довольно некрасивой) данные таблицы
В заключение меня интересует, в чем моя ошибка в рекурсии и как ее улучшить, чтобы получить желаемый результат.
РЕДАКТИРОВАТЬ
Правильный результат структурирован следующим образом:

Код: Выделить всё

array(1) {
[0]=>
array(5) {
["CATEGORY_ID"]=>
string(1) "1"
["CATEGORY_NAME"]=>
string(39) "Дамски дрехи и обувки"
["CATEGORY_FULLNAME"]=>
string(39) "Дамски дрехи и обувки"
["CATEGORY_PARENT_ID"]=>
NULL
["children"]=>
array(2) {
[180]=>
array(5) {
["CATEGORY_ID"]=>
string(3) "180"
["CATEGORY_NAME"]=>
string(23) "Дамски дрехи"
["CATEGORY_FULLNAME"]=>
string(76) "Glami.bg | Дамски дрехи и обувки | Дамски дрехи"
["CATEGORY_PARENT_ID"]=>
string(1) "1"
["children"]=>
array(1) {
[184]=>
array(4) {
["CATEGORY_ID"]=>
string(3) "184"
["CATEGORY_NAME"]=>
string(10) "Рокли"
["CATEGORY_FULLNAME"]=>
string(89) "Glami.bg | Дамски дрехи и обувки | Дамски дрехи | Рокли"
["CATEGORY_PARENT_ID"]=>
string(3) "180"
}
}
}
}
}
}
Например. если у категории есть дочерние элементы, необходимо установить новые ключевые дочерние элементы, а ключом каждого дочернего элемента является его CATEGORY_ID.

Вернуться в «Php»