cacheKey, 3600, function () { return Audition::with(['scoringGuide.subscores', 'judges']) ->withCount('judges') ->withCount('entries') ->withCount([ 'entries as seating_entries_count' => function (Builder $query) { $query->where('for_seating', true); }, ]) ->withCount([ 'entries as advancement_entries_count' => function (Builder $query) { $query->where('for_advancement', true); }, ]) ->orderBy('score_order') ->get() ->keyBy('id'); }); switch ($mode) { case 'seating': return $auditions->filter(fn ($audition) => $audition->for_seating); case 'advancement': return $auditions->filter(fn ($audition) => $audition->for_advancement); default: return $auditions; } } public function getAudition($id): Audition { return $this->getAuditions()->firstWhere('id', $id); } public function refreshCache(): void { Cache::forget($this->cacheKey); $this->getAuditions(); } public function clearCache(): void { Cache::forget($this->cacheKey); } public function getPublishedAuditions() { $cacheKey = 'publishedAuditions'; return Cache::remember( $cacheKey, now()->addHour(), function () { return Audition::with('flags')->orderBy('score_order')->get()->filter(fn ($audition ) => $audition->hasFlag('seats_published')); }); } public function getPublishedAdvancementAuditions() { $cacheKey = 'publishedAdvancementAuditions'; return Cache::remember( $cacheKey, now()->addHour(), function () { return Audition::with('flags')->orderBy('score_order')->get()->filter(fn ($audition ) => $audition->hasFlag('advancement_published')); }); } public function clearPublishedAuditionsCache(): void { Cache::forget('publishedAuditions'); } }