where('status', 1) ->with(['travelType', 'flights']); // فیلتر بر اساس نوع سفر if ($request->filled('travel_type')) { $query->where( 'travel_type_id', $request->input('travel_type') ); } // جستجو بر اساس عنوان if ($request->filled('q')) { $query->where( 'title', 'like', '%' . $request->input('q') . '%' ); } // حداقل قیمت if ($request->filled('price_min')) { $query->where( 'price', '>=', $request->input('price_min') ); } // حداکثر قیمت if ($request->filled('price_max')) { $query->where( 'price', '<=', $request->input('price_max') ); } // مرتب‌سازی if ($request->filled('sort')) { $query->orderBy( 'price', $request->input('sort') === 'desc' ? 'desc' : 'asc' ); } else { $query->latest(); } // صفحه‌بندی $tours = $query->paginate(12)->withQueryString(); // انواع سفر $travelTypes = TravelType::where('status', 1)->get(); return view( 'tours.index', compact('tours', 'travelTypes') ); } /** * حذف فیلترها */ public function removeFilters() { return redirect()->route('tours.index'); } /** * نمایش جزئیات یک تور */ public function show(Tour $tour) { // فقط تورهای فعال قابل مشاهده باشند if ($tour->status != 1) { abort(404); } // افزایش تعداد بازدید $tour->increment('views_count'); // بارگذاری اطلاعات مورد نیاز $tour->load([ 'flights', 'travelType', ]); // تورهای مرتبط $relatedTours = Tour::where('status', 1) ->where('travel_type_id', $tour->travel_type_id) ->where('id', '!=', $tour->id) ->latest() ->limit(4) ->get(); $isFav = false; if (auth()->check()) { $isFav = Favorite::where('user_id', auth()->id()) ->where('favoritable_type', Tour::class) ->where('favoritable_id', $tour->id) ->exists(); } return view( 'tours.show', compact('tour', 'relatedTours', 'isFav') ); } /** * جستجوی پیشنهادی */ public function searchSuggestion(Request $request) { $q = $request->input('q', ''); $tours = Tour::where('status', 1) ->where( 'title', 'like', '%' . $q . '%' ) ->limit(8) ->get([ 'id', 'title', 'slug', 'price' ]); return response()->json($tours); } }