Tüm Sayfalar / 10 - Modeller ve İlişkiler
Sayfa 10 / 161
Database Layer

Modeller ve İlişkiler

129+ Eloquent Model, Polymorphic, HasMany, BelongsTo ilişkileri

Model İstatistikleri

111
Modül Modelleri
Modules/*/Models/
18
App Modelleri
app/Models/
129+
Toplam Model
Tüm sistem
470
Migration
Central + Tenant

Muzibu Çekirdek Modelleri

Song
Şarkılar
Album
Albümler
Artist
Sanatçılar
Genre
Türler
Playlist
Çalma Listesi
Radio
Radyolar
Sector
Sektörler
Favorite
Favoriler

İlişki Türleri (Relationships)

hasMany / belongsTo

Album Song
Artist Album
User Playlist

belongsToMany (Pivot)

Playlist Song
User Role
Pivot: playlist_songs, role_user

morphTo / morphMany

Favorite Song|Album
Media Any Model
favoritable_type, favoritable_id

BaseModel ve Trait'ler

BaseModel Özellikleri

SoftDeletes // Yumuşak silme
HasFactory // Factory desteği
HasTranslations // Çoklu dil
HasSlug // URL-friendly slug

Yaygın Trait'ler

HasTranslations // title, description
HasMedia // Spatie Media
Sluggable // Auto-slug
HasSeo // SEO meta

Arkaplanda Neler Çalışıyor?

Bir şarkı sayfasını açtığınızda Eloquent ORM arka planda onlarca sorgu çalıştırır. İşte detaylar:

1. Model Çözümleme

URL'deki slug analiz edilir, hangi model olduğu belirlenir. Song::where('slug', $slug)->first() çalışır. Bulunamazsa 404 döner.

2. Eager Loading

İlişkili veriler tek sorguda çekilir: with(['album', 'artist', 'genre']). N+1 sorgu problemi önlenir. 100 şarkı için 100 değil 4 sorgu çalışır.

3. Polymorphic İlişkiler

Favori butonu için morphTo kullanılır. Aynı Favorite modeli hem Song, hem Album, hem Artist için çalışır. favoritable_type alanı hangi model olduğunu belirtir.

4. Translation Trait

HasTranslations trait'i aktif dile göre title, description alanlarını otomatik çeker. $song->title dediğinizde app()->getLocale()'e göre doğru dil gelir.

5. Media İlişkisi

Spatie Media Library ile görseller yüklenir. $song->getFirstMediaUrl('cover') ile kapak resmi alınır. Otomatik thumbnail üretimi, WebP dönüşümü yapılır.

6. Soft Delete Koruması

Silinen kayıtlar veritabanından kalkmaz, deleted_at tarihi eklenir. Yanlışlıkla silinen içerik geri getirilebilir. withTrashed() ile silinmişler de görüntülenebilir.

Song Album Artist Genre Playlist
129+
Toplam Model
30
Modül
6
İlişki Türü
8
Temel Trait