paginate(10); return view('backend.product.index', compact('products')); } public function create() { $brands = Brand::get(); $categories = Category::where('is_parent', 1)->get(); return view('backend.product.create', compact('categories', 'brands')); } public function store(Request $request) { $validatedData = $request->validate([ 'title' => 'required|string', 'summary' => 'required|string', 'description' => 'nullable|string', 'photo' => 'required|string', 'stock' => 'required|numeric', 'cat_id' => 'required|exists:categories,id', 'brand_id' => 'nullable|exists:brands,id', 'child_cat_id' => 'nullable|exists:categories,id', 'is_featured' => 'sometimes|in:1', 'status' => 'required|in:active,inactive', 'condition' => 'required|in:default,new,hot', 'price' => 'required|numeric', 'discount' => 'nullable|numeric', ]); $validatedData['slug'] = Str::slug($request->title) . '-' . uniqid(); $validatedData['is_featured'] = $request->input('is_featured', 0); $product = Product::create($validatedData); $sizes = $request->input('size', []); $stocks = $request->input('stock', []); foreach ($sizes as $index => $size) { if (!empty($size) && isset($stocks[$index]) && is_numeric($stocks[$index])) { ProductSize::create([ 'product_id' => $product->id, 'size' => $size, 'stock' => $stocks[$index], ]); } } return redirect()->route('product.index')->with( $product ? 'success' : 'error', $product ? 'Product Successfully added' : 'Please try again!!' ); } public function show($id) { // Optional } public function edit($id) { $brands = Brand::get(); $product = Product::with('sizes')->findOrFail($id); $categories = Category::where('is_parent', 1)->get(); return view('backend.product.edit', compact('product', 'brands', 'categories')); } public function update(Request $request, $id) { $product = Product::findOrFail($id); $validatedData = $request->validate([ 'title' => 'required|string', 'summary' => 'required|string', 'description' => 'nullable|string', 'photo' => 'required|string', 'quantity' => 'required|numeric', 'cat_id' => 'required|exists:categories,id', 'child_cat_id' => 'nullable|exists:categories,id', 'is_featured' => 'sometimes|in:1', 'brand_id' => 'nullable|exists:brands,id', 'status' => 'required|in:active,inactive', 'condition' => 'required|in:default,new,hot', 'price' => 'required|numeric', 'discount' => 'nullable|numeric', ]); $validatedData['is_featured'] = $request->input('is_featured', 0); $status = $product->update($validatedData); // Handle size & stock $sizes = $request->input('size', []); $stocks = $request->input('stock', []); $product->sizes()->delete(); foreach ($sizes as $index => $size) { if (!empty($size) && isset($stocks[$index]) && is_numeric($stocks[$index])) { ProductSize::create([ 'product_id' => $product->id, 'size' => $size, 'stock' => $stocks[$index], ]); } } return redirect()->route('product.index')->with( $status ? 'success' : 'error', $status ? 'Product Successfully updated' : 'Please try again!!' ); } public function destroy($id) { $product = Product::findOrFail($id); $status = $product->delete(); return redirect()->route('product.index')->with( $status ? 'success' : 'error', $status ? 'Product successfully deleted' : 'Error while deleting product' ); } }