'integer', 'mtow' => 'float', 'zfw' => 'float', 'flight_time' => 'float', 'fuel_onboard' => FuelCast::class, 'state' => 'integer', ]; /** * Validation rules */ public static $rules = [ 'subfleet_id' => 'required', 'name' => 'required', 'status' => 'required', 'registration' => 'required', 'mtow' => 'nullable|numeric', 'zfw' => 'nullable|numeric', ]; /** * @return Attribute */ public function active(): Attribute { return Attribute::make( get: fn ($_, $attr) => $attr['status'] === AircraftStatus::ACTIVE ); } /** * @return Attribute */ public function icao(): Attribute { return Attribute::make( set: fn ($value) => strtoupper($value) ); } /** * @return Attribute */ public function ident(): Attribute { return Attribute::make( get: fn ($_, $attrs) => $attrs['registration'].' ('.$attrs['icao'].')' ); } /** * Return the landing time * * @return Attribute */ public function landingTime(): Attribute { return Attribute::make( get: function ($_, $attrs) { if (array_key_exists('landing_time', $attrs) && filled($attrs['landing_time'])) { return new Carbon($attrs['landing_time']); } return $attrs['landing_time']; } ); } /** * foreign keys */ public function airline() { return $this->belongsToThrough(Airline::class, Subfleet::class); } public function airport() { return $this->belongsTo(Airport::class, 'airport_id'); } public function hub() { return $this->hasOne(Airport::class, 'id', 'hub_id'); } public function pireps() { return $this->hasMany(Pirep::class, 'aircraft_id'); } public function simbriefs() { return $this->hasMany(SimBrief::class, 'aircraft_id'); } public function subfleet() { return $this->belongsTo(Subfleet::class, 'subfleet_id'); } }