/** * Returns an array of $id => $name values for every category to display in an HTML select. * * @param bool $idInName * * @return array */ public function getSelectList($idInName = true) { $categories = Cache::rememberForever('categorySelectList', function () { $list = []; /** @var Category[] $cats */ $cats = Category::topLevel()->orderBy('name')->with('subcategories')->get(); /** * @param array $list * @param Category[] $cats * @param int $level */ function appendCats(&$list, $cats, $level = 0) { foreach ($cats as $cat) { $list[$cat->id] = str_repeat(" ", $level) . $cat->name; appendCats($list, $cat->subcategories()->orderBy('name')->get(), $level + 1); } } appendCats($list, $cats); return $list; }); if ($idInName) { foreach ($categories as $id => $name) { $categories[$id] = $name . " [{$id}]"; } } return $categories; }
/** * @api {get} /categories Get Top Level Categories * @apiGroup Categories * @apiDescription Returns a list of top-level categories. * * @return \Illuminate\Http\Response */ public function index() { $categories = Category::topLevel()->with('subcategories')->with('stickers')->orderBy('name')->get(); return $this->response(['categories' => $categories]); }