'int', 'destination_city_id' => 'int', 'file_id' => 'int', 'tour_mode'=> 'int', 'tour_scope' => 'int' ]; protected $fillable = [ 'title', 'summary', 'description', 'origin_city_id', 'destination_city_id', 'file_id', 'tour_type', 'tour_mode', 'tour_scope' ]; #[Scope] protected function applySort(Builder $query, ?string $sort = null): void { switch ($sort) { case 'lowest': $query->withMin('tourDepartures', 'price') ->orderBy('tour_departures_min_price'); break; case 'highest': $query->withMax('tourDepartures', 'price') ->orderByDesc('tour_departures_max_price'); break; default: $query->orderByDesc('id'); break; } } public function originCity() { return $this->belongsTo(City::class, 'origin_city_id'); } public function city() { return $this->belongsTo(City::class, 'destination_city_id'); } public function tourDepartures() { return $this->hasMany(TourDeparture::class , 'tour_id'); } public function file() { return $this->belongsTo(File::class, 'file_id'); } public function comments() { return $this->hasMany(Comment::class, 'tour_id'); } public function favorites() { return $this->hasMany(Favorite::class); } }