findTopCategories($type); if ($topCategories->count() == 0) { return []; } $list = []; foreach ($topCategories as $category) { $list[] = [ 'id' => $category->id, 'name' => $category->name, 'alias' => $category->alias, 'icon' => $category->icon, 'children' => $this->handleChildren($category), ]; } return $list; } protected function handleChildren(CategoryModel $category) { $subCategories = $this->findChildCategories($category->id); if ($subCategories->count() == 0) { return []; } $list = []; foreach ($subCategories as $category) { $list[] = [ 'id' => $category->id, 'name' => $category->name, 'alias' => $category->alias, 'icon' => $category->icon, ]; } return $list; } /** * @param int $type * @return ResultsetInterface|Resultset|CategoryModel[] */ protected function findTopCategories($type) { $query = CategoryModel::query(); $query->where('parent_id = 0'); $query->andWhere('published = 1'); $query->andWhere('deleted = 0'); $query->andWhere('type = :type:', ['type' => $type]); $query->orderBy('priority ASC'); return $query->execute(); } /** * @param int $parentId * @return ResultsetInterface|Resultset|CategoryModel[] */ protected function findChildCategories($parentId) { $query = CategoryModel::query(); $query->where('parent_id = :parent_id:', ['parent_id' => $parentId]); $query->andWhere('published = 1'); $query->andWhere('deleted = 0'); $query->orderBy('priority ASC'); return $query->execute(); } }