public function getFlightNumberForSpacecraftAttribute()
 {
     $self = $this;
     return SpacecraftFlight::whereHas('spacecraft', function ($q) use($self) {
         $q->where('spacecraft_id', $self->spacecraft->id);
     })->whereHas('mission', function ($q) use($self) {
         $q->before($self->mission->launch_order_id);
     })->count() + 1;
 }
 /**
  * @param $substatistic
  * @return mixed
  */
 public static function dragon($substatistic)
 {
     if ($substatistic === 'Missions') {
         return Cache::remember('stats:dragon:missions', 60, function () {
             return SpacecraftFlight::whereHas('mission', function ($q) {
                 $q->whereComplete();
             })->count();
         });
     }
     if ($substatistic === 'ISS Resupplies') {
         return Cache::remember('stats:dragon:ISSResupplies', 60, function () {
             return SpacecraftFlight::whereNotNull('iss_berth')->whereHas('mission', function ($q) {
                 $q->whereComplete();
             })->count();
         });
     }
     if ($substatistic === 'Total Flight Time') {
         return Cache::remember('stats:dragon:totalflighttime', 60, function () {
             return DB::table('spacecraft_flights_pivot')->selectRaw('SUM(TIMESTAMPDIFF(SECOND,missions.launch_exact,spacecraft_flights_pivot.end_of_mission)) AS duration')->where('missions.status', 'Complete')->join('missions', 'missions.mission_id', '=', 'spacecraft_flights_pivot.mission_id')->first()->duration;
         });
     }
     if ($substatistic === 'Flight Time') {
         return Cache::remember('stats:dragon:flighttime', 60, function () {
             return ['values' => SpacecraftFlight::selectRaw('TIMESTAMPDIFF(SECOND,missions.launch_exact,spacecraft_flights_pivot.end_of_mission) / 86400 AS duration, missions.name AS mission')->where('missions.status', 'Complete')->join('missions', 'missions.mission_id', '=', 'spacecraft_flights_pivot.mission_id')->get(), 'extrapolation' => false, 'xAxis' => ['type' => 'ordinal', 'key' => 'mission', 'title' => 'Mission'], 'yAxis' => ['type' => 'linear', 'key' => 'duration', 'title' => 'Duration (Days)', 'zeroing' => true]];
         });
     }
     if ($substatistic === 'Cargo') {
         $query = Cache::remember('stats:dragon:cargo', 60, function () {
             return SpacecraftFlight::select(DB::raw('SUM(upmass) AS upmass, SUM(downmass) AS downmass'))->whereHas('mission', function ($q) {
                 $q->whereComplete();
             })->first();
         });
         $stat[0] = number_format($query->upmass);
         $stat[1] = number_format($query->downmass);
         return $stat;
     }
     if ($substatistic === 'Reflights') {
         return Cache::remember('stats:dragon:reflights', 60, function () {
             return DB::select(DB::raw("SELECT COALESCE(SUM(reflights), 0) as total_flights FROM (SELECT COUNT(*)-1 as reflights FROM spacecraft JOIN spacecraft_flights_pivot ON spacecraft.spacecraft_id = spacecraft_flights_pivot.spacecraft_id WHERE spacecraft.spacecraft_id=spacecraft_flights_pivot.spacecraft_id GROUP BY spacecraft_flights_pivot.spacecraft_id HAVING reflights > 0) reflights"))[0]->total_flights;
         });
     }
 }
 public static function dragon($substatistic, $dynamicString)
 {
     if ($substatistic === 'Missions') {
         if ($dynamicString === 'missionCount') {
             return Cache::remember('stats:description:dragon:missions:missionCount', 60, function () {
                 return SpacecraftFlight::whereHas('mission', function ($q) {
                     $q->whereComplete();
                 })->count();
             });
         }
     }
     if ($substatistic === 'ISS Resupplies') {
         if ($dynamicString === 'issResupplyCount') {
             return Cache::remember('stats:description:dragon:issResupplies:issResupplyCount', 60, function () {
                 return SpacecraftFlight::whereNotNull('iss_berth')->whereHas('mission', function ($q) {
                     $q->whereComplete();
                 })->count();
             });
         }
     }
 }