Radio ve Sector sayfaları için playlistable polymorphic ilişkilerinin düzeltilmesi
Müzik platformunda Radyolar ve Sektörler sayfaları boş görünüyordu. Database'de veriler vardı (122 radyo, 23 sektör, 2152 playlist ilişkisi) ama sayfalar gösterilmiyordu.
Neden? Sistem radyo/sektörlerin playlist'lerini okuyamıyordu çünkü ilişki tanımı yanlıştı.
Çözüm: İlişki tanımını düzelttik. Artık:
HasPlaylistDistribution.php line 30'da
morphedByMany kullanılmıştı.
Sorun: morphedByMany ters ilişki içindir (Playlist → entities).
Radyo/Sektör → Playlists ilişkisi için morphToMany kullanılmalıydı.
Genre.php line 107-118'de manuel playlists()
methodu tanımlıydı ama line 17'de HasPlaylistDistribution trait zaten kullanılıyordu.
Sorun: PHP'de class method trait method'unu override eder. Genre'de manuel method vardı, trait method kullanılmıyordu. Radio ve Sector'da böyle bir sorun yoktu.
Modules/Muzibu/app/Traits/HasPlaylistDistribution.php line 28-39
Modules/Muzibu/app/Models/Genre.php line 103-104
Radio ve Sector modellerinde zaten böyle bir yorum vardı, Genre'ye de eklendi.
app/Providers/AppServiceProvider.php line 114-127
Database'de playlistable_type='Radio' olarak saklanan değerler,
morph map sayesinde \Modules\Muzibu\App\Models\Radio::class olarak çözümleniyor.
Polymorphic ilişkiler, bir modelin birden fazla farklı model tipine ait olabilmesini sağlar. Müzik platformunda playlist'ler radyo, sektör veya genre'lere atanabiliyor.
Radio → Playlists
Playlist → Radios
Database'de short name ('Radio') saklanıyor, Laravel bunu morph map ile full class name'e çeviriyor: