order) { case 'az': $orderby = 'name'; $orderdirection = 'asc'; break; case 'za': $orderby = 'name'; $orderdirection = 'desc'; break; case 'episode-count': $orderby = 'episodes_count'; $orderdirection = 'desc'; break; case 'newest': $orderby = 'created_at'; $orderdirection = 'desc'; break; case 'oldest': $orderby = 'created_at'; $orderdirection = 'asc'; break; default: $orderby = 'episodes_count'; $orderdirection = 'desc'; } $playlists = Playlist::where('is_private', 0) ->withCount('episodes') ->having('episodes_count', '>', 1) ->when($this->search != '', fn ($query) => $query->where('name', 'like', '%'.$this->search.'%')) ->with([ 'user', 'episodes' => fn ($query) => $query->orderBy('position')->limit(4), 'episodes.episode.gallery' => fn ($query) => $query->limit(1), ]) ->orderBy($orderby, $orderdirection) ->paginate($this->pagination); $stats = Cache::remember('publicPlaylistStats', 600, function () { $playlists = Playlist::where('is_private', 0) ->withCount('episodes') ->having('episodes_count', '>', 1) ->get(); return [ 'playlists' => $playlists->count(), 'episodes' => $playlists->sum('episodes_count'), ]; }); return view('livewire.playlists', [ 'playlists' => $playlists, 'totalPlaylists' => $stats['playlists'], 'totalEpisodes' => $stats['episodes'], ]); } }