Files
shahrzadzandi09/app/Http/Controllers/TourController.php
T

158 lines
3.6 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Favorite;
use App\Models\Tour;
use App\Models\TravelType;
use Illuminate\Http\Request;
class TourController extends Controller
{
/**
* لیست / آرشیو تورها با قابلیت فیلتر
*/
public function index(Request $request)
{
$query = Tour::query()
->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);
}
}