'boolean', 'order' => 'integer', ]; public function playlists(): HasMany { return $this->hasMany(MusicPlaylist::class, 'category_id'); } public function subcategories(): HasMany { return $this->hasMany(MusicSubcategory::class, 'category_id'); } // All playlists (including those in subcategories) public function allPlaylists() { $playlists = collect($this->playlists); foreach ($this->subcategories as $subcategory) { $playlists = $playlists->merge($subcategory->playlists); } return $playlists; } public function image(): BelongsTo { return $this->belongsTo(Image::class); } public function getActivePlaylistsAttribute() { return $this->playlists()->where('is_active', true)->get(); } // Total music count across all playlists and subcategories public function getTotalMusicCountAttribute() { $count = $this->playlists->sum(function($playlist) { return $playlist->musics->count(); }); foreach ($this->subcategories as $subcategory) { $count += $subcategory->total_music_count; } return $count; } }