✅ SQL random çalışıyor - Her request farklı sıra döndürüyor
✅ SQL random çalışıyor - Farklı sıralamalar
✅ Pivot table pattern uygulandı - SQL random şimdi çalışıyor
✅ Ambiguous column hatası düzeltildi
Table name qualify edildi: muzibu_playlists.is_active
✅ Ambiguous column hatası düzeltildi
Table name qualify edildi: muzibu_playlists.playlist_id
✅ Tüm şarkılardan SQL random seçim yapıyor
✅ Infinite loop çalışıyor
Exclude list dolduğunda otomatik olarak boş liste ile başa sarıyor
Pivot table (muzibu_playlist_song)
üzerinden ilişki kurulunca inRandomOrder()
her seferinde aynı sırayı veriyordu. JOIN'in default sıralaması değişmiyordu.
$songs = $playlist->songs()
->where('is_active', 1)
->inRandomOrder()
->limit(5)
->get();
// Her seferinde AYNI SIRA:
// 323, 335, 336, 340, 341
$songIds = DB::table('muzibu_playlist_song')
->where('playlist_id', $playlistId)
->pluck('song_id')->unique();
$songs = Song::whereIn('song_id', $songIds)
->where('is_active', 1)
->inRandomOrder()
->limit(5)
->get();
// Her seferinde FARKLI SIRA:
// 374, 340, 343... → 400, 374, 398...
Sector pattern'i uygulandı: Önce pivot'tan song ID'leri çekildi,
sonra Song model'inde
SQL random uygulandı. Bu sayede JOIN sıralaması problemi ortadan kalktı.
is_active kolonu
hem muzibu_playlists
hem de muzibu_playlist_sector
tablolarında var. SQL ambiguous column hatası veriyordu.
$playlistIds = $sector->playlists()
->where('is_active', 1)
->pluck('playlist_id');
// SQL Error:
// Column 'is_active' is ambiguous
$playlistIds = $sector->playlists()
->where('muzibu_playlists.is_active', 1)
->pluck('muzibu_playlists.playlist_id');
// ✅ Çalışıyor
Tablo adı ile qualify edilerek hangi tablonun kolonu olduğu belirtildi. Aynı düzeltme Radio context'i için de uygulandı.
Recent context'te infinite loop mekanizması başarıyla test edildi. Tüm recent şarkılar exclude edildiğinde sistem otomatik olarak exclude list'i temizleyip başa sarıyor.
// Şarkılar tükendi mi?
if ($songs->isEmpty()) {
if (!empty($excludeSongIds)) {
// Exclude'sız tekrar dene (başa sar)
return $this->getRecentSongs($offset, $limit, $subType, []);
}
return [];
}
Tüm context'ler şimdi SQL seviyesinde randomizasyon kullanıyor:
// Pivot table gereken context'ler için:
$songIds = DB::table('...')
->pluck('song_id')->unique();
Song::whereIn('song_id', $songIds)
->inRandomOrder() // 🎲 SQL random
->limit($limit)
->get();
// Direkt ilişki için:
Song::where('genre_id', $genreId)
->inRandomOrder() // 🎲 SQL random
->limit($limit)
->get();
10 context türü ve transition kuralları: