diff --git a/app/Http/Controllers/TourController.php b/app/Http/Controllers/TourController.php index a0f428e..412dcf0 100644 --- a/app/Http/Controllers/TourController.php +++ b/app/Http/Controllers/TourController.php @@ -2,9 +2,23 @@ namespace App\Http\Controllers; +use App\Enums\FlightStatus; +use App\Enums\TourStatus; +use App\Models\Tour; use Illuminate\Http\Request; class TourController extends Controller { - // + public function index() + { + $tours = Tour::query() + ->where('status', TourStatus::ENABLE) + ->with('file') + ->applySort() + ->paginate() + ->withQueryString(); + + return view('tours.index', compact('tours')); + } + } diff --git a/app/Models/Tour.php b/app/Models/Tour.php index 14049d4..6fea2f6 100644 --- a/app/Models/Tour.php +++ b/app/Models/Tour.php @@ -7,6 +7,8 @@ namespace App\Models; use Carbon\Carbon; +use Illuminate\Contracts\Database\Query\Builder; +use Illuminate\Database\Eloquent\Attributes\Scope; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; @@ -81,4 +83,32 @@ class Tour extends Model { return $this->hasMany(TourDate::class); } + + #[Scope] + protected function applySort(Builder $query): void + { + $request = request(); + + switch ($request->input('sort')) { + case 'most_viewed': + { + $query->orderByDesc('views'); + break; + } + case 'cheapest': + { + $query->orderBy('price'); + break; + } + case 'expensive': + { + $query->orderByDesc('price'); + break; + } + default: + { + $query->orderByDesc('created_at'); + } + } + } } diff --git a/resources/views/components/tour.blade.php b/resources/views/components/tour.blade.php index ad36270..6f5560a 100644 --- a/resources/views/components/tour.blade.php +++ b/resources/views/components/tour.blade.php @@ -1,8 +1,8 @@ -
+
+ + + {{ $tour->summary }} +
+