withCount('subcategories'); if ($request->boolean('with_subcategories')) { $query->with('subcategories'); } return response()->json( $query->orderBy('name')->get() ); } public function store(Request $request) { $data = $request->validate([ 'name' => 'required|string|max:255|unique:categories,name', ]); $category = Category::create($data); return response()->json([ 'message' => 'Category created successfully', 'category' => $category, ], 201); } public function show($id) { $category = Category::with('subcategories')->withCount('subcategories')->findOrFail($id); return response()->json($category); } public function update(Request $request, $id) { $category = Category::findOrFail($id); $data = $request->validate([ 'name' => 'required|string|max:255|unique:categories,name,' . $category->id, ]); $category->update($data); return response()->json([ 'message' => 'Category updated successfully', 'category' => $category, ]); } public function destroy($id) { $category = Category::findOrFail($id); $category->delete(); return response()->json(['message' => 'Category deleted successfully']); } }