latest(); if ($request->has('kategori') && $request->kategori != '' && $request->kategori != 'Semua') { $slug = $request->kategori; $query->whereHas('kategori', function ($q) use ($slug) { $q->where('slug', $slug); }); } $produks = $query->take(8)->get(); if ($request->ajax()) { return view('landing.partials.product_list', compact('produks'))->render(); } $produkTerlaris = Produk::withSum([ 'detailTransaksis as total_terjual' => function ($query) { $query->whereHas('transaksi', function ($q) { $q->where('status', '!=', 'batal'); }); } ], 'jumlah') ->orderByDesc('total_terjual') ->take(4) ->get(); return view('landing.home', compact('produks', 'produkTerlaris')); } public function shop(Request $request) { $query = Produk::where('stok', '>', 0); // --- FILTER LOKASI --- if ($request->filled('provinsi')) { $query->whereHas('petani', function($q) use ($request) { $q->where('provinsi_code', $request->provinsi); }); } if ($request->filled('kota')) { $query->whereHas('petani', function($q) use ($request) { $q->where('kota_code', $request->kota); }); } if ($request->filled('kecamatan')) { $query->whereHas('petani', function($q) use ($request) { $q->where('kecamatan_code', $request->kecamatan); }); } if ($request->filled('desa')) { $query->whereHas('petani', function($q) use ($request) { $q->where('desa_code', $request->desa); }); } // Filter Search if ($request->has('search') && $request->search != '') { $query->where('nama_produk', 'like', '%' . $request->search . '%'); } // Filter Kategori if ($request->has('kategori') && $request->kategori != '') { $slug = $request->kategori; $query->whereHas('kategori', function ($q) use ($slug) { $q->where('slug', $slug); }); } // Sorting if ($request->has('sort')) { switch ($request->sort) { case 'termurah': $query->orderBy('harga', 'asc'); break; case 'termahal': $query->orderBy('harga', 'desc'); break; case 'terbaru': $query->latest(); break; default: $query->latest(); break; } } else { $query->latest(); } $produks = $query->paginate(9); return view('landing.shop', compact('produks')); } public function detail($id) { $produk = Produk::with(['kategori', 'petani', 'images'])->findOrFail($id); $produk_terkait = Produk::where('kategori_id', $produk->kategori_id) ->where('id', '!=', $produk->id) ->where('stok', '>', 0) ->inRandomOrder() ->take(4) ->get(); return view('landing.detail', compact('produk', 'produk_terkait')); } }