Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: Gelişmiş Laravel Eloquent: Polimorfik İlişkilerin Açıklaması
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » Gelişmiş Laravel Eloquent: Polimorfik İlişkilerin Açıklaması

Yazılım

Gelişmiş Laravel Eloquent: Polimorfik İlişkilerin Açıklaması

teknomers
Son güncelleme: 29 Aralık 2025 17:31
teknomers
Paylaş
Paylaş

“Veritabanı şeması bir sözleşmedir. Polimorfizm, uygulamanızın bu sözleşmeyi bozmadan büyümesine olanak tanıyan bir madde.” – Laravel Mimarisi Lideri


Önemli Noktalar

  • Yapısal Esneklik: Polimorfik ilişkiler, tek bir modelin birden fazla diğer modelle tek bir ilişki kullanarak bağlı olmasına olanak tanır, bu da veritabanı şeması karmaşıklığını önemli ölçüde azaltır.
  • Şema Ölçeklenebilirliği: Ayrı “post_comments” ve “video_comments” tabloları oluşturmak yerine, her bir varlık için hizmet eden tek bir “comments” tablosu kullanabilirsiniz.
  • DRY (Kendini Tekrarlama): Eki, etiketler veya beğeniler için yazılan mantık bir kez yazılır ve sonsuz modeller arasında paylaşılır.
  • Polimorfik Haritalarla Koparma: EnforceMorphMap kullanarak veritabanınızın PHP sınıf adlarına “bağlı” olmasını önler, uzun vadeli bakım kolaylığı sağlar.
  • Performans Kontrolü: Güçlü olmasına rağmen, polimorfik ilişkiler veri ölçeklendikçe yavaş sorgu yürütmelerini önlemek için morf sütunlarında stratejik indeksleme gerektirir.
  • Framework Egemenliği: Laravel’in 2025’te %35.87 pazar payı, karmaşık SQL’i okunabilir API çağrılarına dönüştüren Eloquent gibi geliştirici dostu araçlar sayesinde büyük ölçüde artmaktadır.


İçindekiler

  1. Giriş
  2. Polimorfizmin Mimarisi
  3. Gerçek Dünya Kullanım Durumu 1: Evrensel Yorum Sistemi (Birden-Çoğa)
  4. Gerçek Dünya Kullanım Durumu 2: Medya ve Resim Kütüphanesi (Birden-Bire)
  5. Gerçek Dünya Kullanım Durumu 3: Esnek Etiketleme Sistemi (Çoktan-Çoka)
  6. Gerçek Dünya Kullanım Durumu 4: Küresel Aktivite Akışları ve Denetim Kayıtları
  7. Gerçek Dünya Kullanım Durumu 5: Beğeniler ve Tepkiler
  8. “Morph Map” Temel Deseni
  9. İstatistikler
  10. İlginç Bilgiler
  11. SSS
  12. Sonuç


Giriş

Geleneksel veritabanı tasarımında, bir Kullanıcının bir Resmi ve bir Ürününde de bir Resmi olması durumunda, genellikle iki ayrı tabloya sahip olursunuz veya boş yabancı anahtarlarla dolu karmaşık bir tabloya sahip olursunuz. Uygulamanız büyüdükçe, bu tablo genişlemesi şemanızı kolayca kırar ve kodunuzu gereksiz hale getirir.

Polimorfik ilişkiler bu senaryoda faydalıdır. Bir modelin kimliğini bağlama göre “şekil değiştirmesine” olanak tanır. Bu makalenin sonunda, her yeni varlık için tek bir yeni tablo eklemeden, özelliklerinizin yatay olarak büyümesini sağlayan bir birleşik veritabanı yapısını nasıl oluşturacağınızı anlayacaksınız.


Polimorfizmin Mimarisi

Polimorfik bir ilişkinin temelinde iki sütun bulunur:

  1. ID: İlgili modelin birincil anahtarı (örneğin, 10).
  2. Tip: İlgili modelin sınıf adı veya “takma adı” (örneğin, App\Models\Post).

Laravel, bu sütunları otomatik olarak oluşturmak için migrations’ta morphs() yardımcı fonksiyonunu kullanır.


Gerçek Dünya Kullanım Durumu 1: Evrensel Yorum Sistemi (Birden-Çoğa)

Uygulamanızın Gönderileri, Videoları ve Görevleri olduğunu varsayın. Hepsinin yorumlara ihtiyacı var.
Uygulama:

// Migration
Schema::create('comments', function (Blueprint $table) {
    $table->id();
    $table->text('body');
    $table->morphs('commentable'); // commentable_id ve commentable_type oluşturur
    $table->timestamps();
});
// Comment Model
public function commentable() {
    return $this->morphTo();
}
// Post Model
public function comments() { 
    return $this->morphMany(Comment::class, 'commentable');
}
Enter fullscreen mode
Exit fullscreen mode

Fayda: Artık $post->comments veya $video->comments çağrısını yapabilirsiniz. Eloquent, sahne arkasında filtreleme mantığını yöneterek bir videonun asla bir gönderinin yorumlarını görmemesini sağlar.


Gerçek Dünya Kullanım Durumu 2: Medya ve Resim Kütüphanesi (Birden-Bire)

Bir Kullanıcının bir profil resmi ve bir Markanın bir logosu vardır. Her ikisi de sadece resimlerdir.
Uygulama:

public function image() {
    return $this->morphOne(Image::class, 'imageable');
}
Enter fullscreen mode
Exit fullscreen mode

Fayda: Görsellerin merkezi hale getirilmesi, görüntü optimizasyonu veya CDN yükleme gibi küresel özellikleri uygulamayı son derece kolaylaştırır, çünkü tüm “sahip” modeller aynı Resim mantığı ile etkileşimde bulunur.


Gerçek Dünya Kullanım Durumu 3: Esnek Etiketleme Sistemi (Çoktan-Çoka)

Peki, birçok Gönderinin birçok Etikete sahip olabileceği ve birçok Ürünün de birçok Etikete sahip olabileceği bir durum düşünün.
Uygulama: morphToMany ve morphedByMany kullanarak, uygulama genelindeki her ilişkiyi takip eden tek bir pivot tablosu (örn. taggables) yaratabilirsiniz.

Gerçek Dünya Kullanım Durumu 4: Küresel Aktivite Akışları ve Denetim Kayıtları
Her bir işlemi takip et: “Kullanıcı A, Gönderi B’yi beğendi” veya “Kullanıcı C, Görev D’yi güncelledi.”
Uygulama:

$log = Activity::create([
    'action' => 'updated',
    'subject_id' => $task->id,
    'subject_type' => get_class($task),
]);
Enter fullscreen mode
Exit fullscreen mode

Fayda: “Aktivite Akışınız”, konuyla ilgili türler temelinde farklı Blade bileşenleri kullanarak render edilebilen tek bir polimorfik veri akışı haline gelir.


Gerçek Dünya Kullanım Durumu 5: Beğeniler ve Tepkiler

Gönderi_beğenileri ve yorum_beğenileri yerine, beğenilebilir bir varlığa morf olan bir Beğeni modeli kullanın.
Fayda: Beğeninin bir yorumda, fotoğrafta veya bir başlıkta olup olmadığını gözetmeksizin “Küresel Popülerlik” hesaplayabilirsiniz.


“Morph Map” Temel Deseni

Varsayılan olarak, Laravel veritabanınızda tam sınıf adını (örn. App\Models\Post) saklar. Eğer bu sınıfı yeniden adlandırırsanız, verileriniz bozulur.
Çözüm: AppServiceProvider’ınızda bir harita tanımlayın:

use Illuminate\Database\Eloquent\Relations\Relation;
public function boot() {
    Relation::enforceMorphMap([
        'post' => 'App\Models\Post',
        'video' => 'App\Models\Video',
    ]);
}
Enter fullscreen mode
Exit fullscreen mode

Artık veritabanınız yalnızca “post” dizesini saklar. Bu, verilerinizi kod yapınızdan ayırır.

“Belirlenen görevinizi yerine getirmek hakkına sahipsiniz, ancak eylemin sonuçlarına değil.”
— Bhagavad Gita 2.47


İstatistikler

  • Doğru indeksleme ile, polimorfik ilişki sorguları büyük veri kümesinde ondan alt milisaniye yanıt sürelerine kadar gidebilir (Kaynak).
  • 20 yıldan fazla bir sürede Obje-İlişkisel Haritalama (ORM) çözümleri üzerine yapılan bir inceleme, birçok desenin ticareti ve karmaşık ORM özelliklerinin nasıl geliştiği hakkında bilgi vermektedir – polimorfizm, miras haritalama vb. dahil. (Kaynak).
  • 1M’den fazla satır içeren tablolarda indekslenmemiş polimorfik sorgular, standart yabancı anahtarlardan 3 kat daha yavaş olabilir, bu nedenle indeksleme kritik öneme sahiptir.
  • Polimorfik ilişkiler, karmaşık bir uygulamadaki toplam pivot tablosu sayısını %34’e kadar azaltabilir.


İlginç Bilgiler

  • “Morphs” Yardımcıları: $table->morphs(‘name’) migration yardımcısı, performans açısından kritik olan her iki sütun üzerinde otomatik olarak bir indeks oluşturur.
  • İsimlendirme Kuralları: İlişkiniz imageable olarak adlandırıldığında, Laravel imageable_id ve imageable_type bekler.
  • N+1 Riski: Polimorfik ilişkiler, eager loading düzgün kullanılmadığında N+1 sorunlarına eğilimlidir (örn. with(‘commentable’)).
  • Soft Deletes: Eğer ana modelde Soft Deletes kullanıyorsanız, polimorfik çocuklar (yorumlar gibi), bir cascade paketi kullanılmadıkça otomatik olarak gizlenmez.


SSS

S1: Polimorfik ilişkilerde yabancı anahtar kullanabilir miyim? Cevap: Hayır. _id sütunu birden fazla tabloya işaret ettiği için standart veritabanı düzeyi yabancı anahtar kısıtlamaları uygulanamaz. Veri bütünlüğünü kodunuzda sağlamalısınız.

S2: Polimorfik ilişkiler daha mı yavaştır? Cevap: Biraz daha, çünkü veritabanı iki sütuna (Tip ve ID) göre filtreleme yapmak zorundadır. Ancak doğru indeksleme ile, fark çoğu uygulama için önemsizdir.

S3: Hangi durumlarda KULLANMAMAK gereklidir? Cevap: Eğer iki varlık temelden farklıysa ve asla paylaşılacak bir mantık yoksa, bunları ayrı tablolarda tutun. Zorla polimorfizm uygulamayın.

S4: Polimorfik “Yorumlar” tablosundan yalnızca “Gönderileri” nasıl sorgularım? Cevap: Comment::where(‘commentable_type’, ‘post’)->get();.

S5: nullableMorphs() nedir? Cevap: morphs() ile aynı, ancak _id ve _type sütunlarının NULL olmasına izin verir.


Sonuç

Polimorfik ilişkiler, ölçeklenebilir, temiz ve profesyonel Laravel uygulamaları oluşturmanın “gizli sosu”dur. Veritabanınızı katı bir tablo setinden, etiketleme, yorum yapma ve günlük tutma gibi karmaşık özellikleri minimum yük ile destekleyen dinamik, esnek bir ekosisteme dönüştürür.

Laravel, %35.87 pazar payı ile egemenliğini sürdürürken, bu gelişmiş Eloquent desenlerini idrak etmek, bir junior geliştiriciyi senior bir mimardan ayıran unsurdur.

Kaynak: Orijinal Makale

Contents
  • Önemli Noktalar
  • İçindekiler
  • Giriş
  • Polimorfizmin Mimarisi
  • Gerçek Dünya Kullanım Durumu 1: Evrensel Yorum Sistemi (Birden-Çoğa)
  • Gerçek Dünya Kullanım Durumu 2: Medya ve Resim Kütüphanesi (Birden-Bire)
  • Gerçek Dünya Kullanım Durumu 3: Esnek Etiketleme Sistemi (Çoktan-Çoka)
  • Gerçek Dünya Kullanım Durumu 5: Beğeniler ve Tepkiler
  • “Morph Map” Temel Deseni
  • İstatistikler
  • İlginç Bilgiler
  • SSS
  • Sonuç
Eloquent’ta İlişkileri Anlamak (Laravel Başlangıç Kılavuzu)
Filtreleme Mantığını Kontrolcülerde Yazmayı Bırak — Laravel için Filterable ile Tanışın
Laravel’de Görsel Küçültmeleri Önceden Üretmeyi Durdurun – Bunun Yerine Anlık Olarak Yapın
Deploynix’i Üretimde Hata Takibi için Sentry ile Bağlama
Microsoft Teams henüz bu korkunç özelliği eklemiyor
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale Samsung TV’lerde Google Photos ile Anılarınızı Büyüteceksiniz!
Sonraki Makale 2025’te Test Edilen En İyi Yastıklar: Hangi Vücut Yastığı Seçilmeli?

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

OpenAI Hassas Verileri Koruma İçin Lockdown Modunu Tanıttı
Genel
RAM fiyatları yıl sonuna kadar iki katına çıkacak, indirimler eski stokları eritmekten kaynaklanıyor
Donanım
Meta Kendi Yapay Zeka Tabanlı Tıklama Tuzağı Haber Akışını Yaratıyor
Liste
Final Fantasy 7 Minigame Yenilikleriyle Seçim Heyecanı Sunuyor
Oyun
1972’de 8 inçlik, 80KB’lik disklerin patenti alındı
Donanım
GOG Nazi Sembolleriyle İlgili E-Posta Göndermek Üzere Özür Diledi
Liste
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?