'int', 'duration' => 'int', 'price' => 'int', 'status' => TourStatus::class, 'created_at' => 'datetime', 'views' => 'int', ]; protected $fillable = [ 'title', 'summary', 'descriptions', 'file_id', 'origin', 'destination', 'duration', 'price', 'views', 'status', 'created_at', 'start_date', 'end_date', 'capacity', 'updated_at' ]; public function file() { return $this->belongsTo(File::class); } public function comments() { return $this->hasMany(Comment::class); } public function favorites() { return $this->hasMany(Favorite::class); } public function tourDates() { 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'); } } } }