سلام دوستان
قصد نوشتن یک قسمت جستجوی سایت رو داریم بنظرتون روشی که توی زیر توضیح میدم اصولی و بهینه هستش یا خیر؟
ببینید روش به این صورته که کابر وقتی کلیک کرد روی یکی از گزینه های فیلتر متد سرچ اجرا میشه و متد سرچ هم به این روشه که یک کویری اصلی داره با تعدادی شروط که اگه یکی از فیلترها فعال بود این قسمت از کویری رو هم لحاظ کنه در غیر اینصورت این قسمت رو اسکیپ کنه...نمونه کد:البته این سرچ اپشن های زیادی داره بنظرتون این متد و نهایتا کویری آخر کد بهینه هست یا روش بهتری هست؟ ممنون
البته این فقط نمونه کد هستش و متد اصلی اصولی تر نوشته خواهد شد و تمیزتر....
public function doSearch()
{
$category = Category::where('id', $_GET['category_id'])->first();
$catId = $category['id'];
$brands = [];
$brandsFirst = DB::table('products')->where('category_id', $category->id)->distinct()->get(['brand']);
foreach ($brandsFirst as $key => $value) {
$brands[$key] = $value->brand;
}
$mojudi = -1;
if (isset($_GET['mojudi'])) {
$mojudi = 0;
}
$takhfif = -1;
if (isset($_GET['takhfif'])) {
$takhfif = 0;
}
$priceEx = explode(',', $_GET['priceRange']);
$min = $priceEx[0] . '000';
$min2 = $priceEx[0];
// dd($priceEx);
$max = $priceEx[1] . '000';
$max2 = $priceEx[1];
$orderBy1 = '';
$o1 = $_GET['orderBy1'];
$o2 = $_GET['orderBy2'];
if (isset($_GET['orderBy1'])) {
$orderBy1 = ' order By ' . $_GET['orderBy1'] . ' ' . $_GET['orderBy2'] . ' ';
}
$brand2 = '';
$finalBrand = [];
$selectedBrands = [];
if (isset($_GET['brand'])) {
$finalBrand = $_GET['brand'];
$selectedBrands = $_GET['brand'];
foreach ($finalBrand as $key => $value) {
$finalBrand[$key] = $value;
}
}
$products = Product::where('category_id', $catId)
->where('mojudi', '>', $mojudi)
->where('discount', '>', $takhfif)
->whereBetween('price', [$min + 0, $max + 0])
->when(isset($_GET['brand']), function ($query) use ($finalBrand) {
$query->whereIn('brand', $finalBrand);
})
->orderBy($o1, $o2)
->paginate(3);
// dd($products);
$catParent = Category::where('id', $category['parent_id'])->first();
return view('search.index', compact('products', 'brands', 'category', 'catParent', 'min2', 'max2', 'selectedBrands'));
}
@endworld
@shift.delete
@hekmati
@PWR @alirezadini @arminamirinasab
@MrMobin @TGame
اولین نفری باشید که به این پرسش کمک میکند و مسیر حل مشکل را باز میکند.
اولین پاسخ را بنویسیدشاید پاسخ شما همینجا باشد