Не получается выбрать все дочерние категории главной категории.
Структура таблицы category:
У каждой категории есть parent_id. Если parent_id = 0, это значит это родитель
Нужно выбрать все category_id родителя в один массив.
Вот кусок кода, с которым я работал. Но он не выводит 3-4-5 вложенность категорий:
$filter_category_id тут родитель
if ($filter_category_id) {
$this->load->model('catalog/category');
$cats = array($filter_category_id);
$cats = $this->model_catalog_category->getChildCategories($filter_category_id, $cats);
$cats_merge = array();
if ($cats) {
foreach ($cats as $cat) {
$catsa = $this->model_catalog_category->getChildCategories($cat);
$cats_merge = array_merge($cats_merge, $catsa);
}
}
$cats_merge = array_merge($cats_merge, $cats);
$cats_merge = array_unique($cats_merge);
return $cats_merge;
}
А тут обращение к таблице:
public function getChildCategories($id, $cats = array()){
$sql = "SELECT * FROM category WHERE parent_id = " . $id;
$result = $this->db->query($sql);
$rows = $result->rows;
if($rows){
foreach($rows as $row){
$cats[] = $row['category_id'];
$this->getChildCategories($row['category_id'], $cats);
}
}
return $cats;
}
Нашел решение:public function getCategoriesandSubs($parent_id = 0) {
static $cat_branch = array();
$results = $this->db->query("SELECT * FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE c.parent_id = '" . (int)$parent_id . "' AND c.status = 1");
$num_rows = count($results->rows);
if($num_rows != 0) {
foreach ($results->rows as $result) {
$cat_branch[] = $result['category_id'];
$this->getCategoriesandSubs($result['category_id']);
}
}
if(count($cat_branch) == 0) {
$cat_branch[] = $parent_id;
}
return $cat_branch;
}