all()); // Ambil daftar kategori detail untuk dropdown $kategoriDetails = DataKategoriDetail::all(); // Query utama DataKuliner $query = DataKuliner::query(); // Filter berdasarkan kategori (jika ada input id_kategori_detail) if ($request->id_kategori_detail) { $query->whereHas('wisata.kategori_detail', function ($q) use ($request) { $q->where('id', $request->id_kategori_detail); }); } // Filter berdasarkan nama kuliner (jika ada input nama_kuliner) if ($request->nama_kuliner) { $query->where('nama_kuliner', 'like', '%' . $request->nama_kuliner . '%'); } // Ambil data kuliner dengan relasi wisata dan kategori $DataKuliner = $query->with(['wisata.kategori_detail.kategori'])->latest()->paginate(10); return view('admin.adminDataKuliner', compact('DataKuliner', 'kategoriDetails')); } public function create() { $DataWisata = DataWisata::all(); return view('admin.tambahKuliner', ['DataWisata' => $DataWisata]); } public function store(Request $request) { // Validasi data yang diterima $validated = $request->validate([ 'id_wisata' => 'required', 'nama_kuliner.*' => 'required|string|max:255', 'deskripsi_kuliner.*' => 'required|string', 'no_hp.*' => ['required', 'regex:/^(\+62|0)[0-9]{8,13}$/'], 'jam_operasional.*.hari' => 'nullable|string', 'jam_operasional.*.buka' => 'nullable|date_format:H:i', 'jam_operasional.*.tutup' => 'nullable|date_format:H:i', 'gambar_kuliner.*' => 'nullable|image', 'gambar_menu.*.*' => 'nullable|image', ]); // Proses simpan data kuliner dan gambar foreach ($request->nama_kuliner as $index => $nama_kuliner) { $kuliner = new DataKuliner(); $kuliner->id_wisata = $request->id_wisata; $kuliner->nama_kuliner = $nama_kuliner; $kuliner->deskripsi_kuliner = $request->deskripsi_kuliner[$index] ?? null; $kuliner->no_hp = $request->no_hp[$index] ?? null; // Simpan jam operasional untuk masing-masing kuliner $kuliner->jam_operasional = isset($request->jam_operasional[$index]) ? json_encode($request->jam_operasional[$index]) : null; // Menyimpan gambar kuliner if ( is_array($request->file('gambar_kuliner')) && isset($request->file('gambar_kuliner')[$index]) ) { $file = $request->file('gambar_kuliner')[$index]; $path = $file->store('images/kuliner/img', 'public'); $kuliner->gambar_kuliner = $path; } // Menyimpan gambar menu if (isset($request->gambar_menu[$index]) && is_array($request->gambar_menu[$index])) { $menu_images = []; foreach ($request->gambar_menu[$index] as $menu_image) { $path = $menu_image->store('images/kuliner/detail', 'public'); $menu_images[] = $path; } $kuliner->gambar_menu = json_encode($menu_images); } $kuliner->save(); } return redirect()->route('kuliner.index')->with('success', 'Kuliner berhasil ditambahkan.'); } public function edit($id) { // Ambil data kuliner berdasarkan ID $kuliner = DataKuliner::find($id); // Cek apakah data ditemukan if (!$kuliner) { return redirect()->route('kuliner.index')->with(['error' => 'Kuliner tidak ditemukan']); } // Decode JSON ke array jika masih string if (is_string($kuliner->jam_operasional)) { $kuliner->jam_operasional = json_decode($kuliner->jam_operasional, true); } // Ambil data wisata untuk dropdown $wisata = DataWisata::all(); // Kirim data ke view edit return view('admin.editKuliner', [ 'kuliner' => $kuliner, 'wisata' => $wisata ]); } public function update(Request $request, $id) { $request->validate([ 'id_wisata' => 'required', 'nama_kuliner' => 'required|string|max:255', 'deskripsi_kuliner' => 'nullable|string|max:800', 'gambar_kuliner' => 'nullable|image', 'gambar_menu.*' => 'nullable|image', 'no_hp' => 'nullable|string', 'jam_operasional' => 'nullable|array', ]); $kuliner = DataKuliner::find($id); if (!$kuliner) { return redirect()->route('kuliner.index')->with(['error' => 'Data kuliner tidak ditemukan']); } try { $kuliner->id_wisata = $request->id_wisata; $kuliner->nama_kuliner = $request->nama_kuliner; $kuliner->deskripsi_kuliner = $request->deskripsi_kuliner; $kuliner->no_hp = $request->no_hp; // ✅ Simpan seluruh jam_operasional if ($request->has('jam_operasional')) { $kuliner->jam_operasional = json_encode($request->jam_operasional); } // ✅ Gambar utama if ($request->hasFile('gambar_kuliner')) { if ($kuliner->gambar_kuliner) { Storage::delete('public/' . $kuliner->gambar_kuliner); } $path = $request->file('gambar_kuliner')->store('images/kuliner/img', 'public'); $kuliner->gambar_kuliner = $path; } // ✅ Gambar Menu if ($request->hasFile('gambar_menu')) { if ($kuliner->gambar_menu) { foreach (json_decode($kuliner->gambar_menu, true) as $oldImage) { Storage::delete('public/' . $oldImage); } } $menuImages = []; foreach ($request->file('gambar_menu') as $file) { $menuImages[] = $file->store('images/kuliner/detail', 'public'); } $kuliner->gambar_menu = json_encode($menuImages); } $kuliner->save(); return redirect()->route('kuliner.index')->with(['success' => 'Data kuliner berhasil diupdate']); } catch (\Exception $e) { return back()->withInput()->withErrors(['error' => $e->getMessage()]); } } public function destroy($id) { // Temukan kategori berdasarkan ID $kuliner = DataKuliner::findOrFail($id); // Hapus kategori $kuliner->delete(); return redirect()->route('kuliner.index')->with('success', 'Kuliner berhasil dihapus.'); } public function show($id) {} }