TIF_NGANJUK_E41220737/app/Http/Controllers/LandingController.php

119 lines
3.9 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Produk;
class LandingController extends Controller
{
public function index(Request $request)
{
$query = Produk::with('petani')->latest();
if ($request->has('kategori') && $request->kategori != '' && $request->kategori != 'Semua') {
$slug = $request->kategori;
$query->whereHas('kategori', function ($q) use ($slug) {//filter berdasarkan relasi kategori
$q->where('slug', $slug);//ambil produk dgn slug tertentu
});
}
$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) {// filter data produk berdasarkan relasi petani
$q->where('provinsi_code', $request->provinsi);// mengambil data produk sesuai dengan provinsi yang dipilih
});
}
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 != '') {//memastikan user memilih kategori
$slug = $request->kategori;//ambil kategori berdasarkan slug yg diinptkan
$query->whereHas('kategori', function ($q) use ($slug) {
$q->where('slug', $slug);//ambil produk dhn slug tertentu
});
}
// 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()//mengacak urutan data
->take(4)
->get();
return view('landing.detail', compact('produk', 'produk_terkait'));
}
}