'datetime', 'departure_time' => 'datetime', 'arrival_time' => 'datetime', 'capacity' => 'int', 'price' => 'float', 'type' => 'int', 'status' => 'int', ]; protected $attributes = [ 'views' => 0, ]; protected $fillable = [ 'airline', 'flight_number', 'origin', 'destination', 'departure_date', 'departure_time', 'arrival_time', 'flight_class', 'capacity', 'price', 'image', 'views', 'type', 'status' ]; public function travelType() { return $this->belongsTo(TravelType::class); } public function comments() { return $this->hasMany(Comment::class); } public function favorites() { return $this->morphMany(Favorite::class, 'favoritable'); } public function reservations() { return $this->morphMany( Reservation::class, 'reservable'); } #[Scope] public function applySearch(Builder $query, ?array $filters = []): void { $query->when($filters['search'] ?? null, function ($query, $search) { $query->where(function ($q) use ($search) { $q->where('airline', 'like', "%{$search}%") ->orWhere('flight_number', 'like', "%{$search}%") ->orWhere('origin', 'like', "%{$search}%") ->orWhere('destination', 'like', "%{$search}%"); }); }); } #[Scope] public function filterType(Builder $query, $type = null): void { $query->when($type !== null && $type !== '', function ($query) use ($type) { $query->where('type', $type); }); } #[Scope] public function sort(Builder $query, $sort = null): void { if ($sort == 'price_asc') { $query->orderBy('price', 'asc'); } if ($sort == 'price_desc') { $query->orderBy('price', 'desc'); } } }