Merhaba Phphocasi.com.tr takipçileri,
Bu yazımda sizlere daha önce bahsettiğim one to one (birebir) ilişkisinin daha karmaşık hali olan Polymorphic One To One Relation ilişkisini anlatmaya çalışacağım. Yazdığınız yorumlara teşekkür ederim. Her yorumunuza hızlı bir şekilde cevap vermeye çalışıyorum. Sizin yorumlarınız çok önemli lütfen paylaşım ve yorumlarınızı bizden esirgemeyin. Laravel’in en büyük rakibi olan Codeigniter eğitimleri de başladı. Lütfen hangi yapıyı tercih ettiğinizi bizimle paylaşın… Ben yapı/framework kullanmam direk pure PHP ile kodlarım diyenler içinde PHP Eğitimlerimizi takip edebilirsiniz.
Laravel Eloquent Polymorphic One To One Relation Nedir?
Daha önceki yazılarımızda bahsettiğimiz ilişki örneklerinden farklı olarak polymorphic ilişki de birden fazla tabi ilişki içerisindedir. Örnek vermek gerekirse, bir videos ve bir de posts tablolarınız olduğunu varsayalım. Bu tabloların ikisi de ayrı bir categories tablosu ile birebir ilişki içinde olması durumudur. Burada önemli nokta video ve/ya post girdileri birden fazla category e sahip olamazlar.
Polymorphic One To One Relation Bağlantısı
Yukarıdaki örnekten devam etmek gerekirse öncelikle bir Post ve bir de Video model ve migration larını hazırlayalım.
php artisan make:model Post -m php artisan make:model Video -m
kodunu yazarak Post ve Video adında modeller ve bu modellere bağlı migration dosyalarını oluşturuyoruz. Oluşturduğumuz Post ve Video migration dosyalarının içerisine
$table->string("title"); $table->text("detail");
yazarak Post ve Video tablolarını basit bir şekilde oluşturuyoruz. Daha sonra ise Categories tablosunu hazırlamak için
php artisan make:model Category -m
yazıyor ve migration tablosu içerisine
$table->string("title"); $table->int("categoryable_id"); $table->string("categoryable_type);
yazarak tablomuzu oluşturuyoruz. Category tablosunda yer alan categoryable_id Post veya Video nun id bilgisi olmalı. categoryable_type ise ilişkinin oluşturulacağı Model i belirtir.
Oluşturduğumuz modelleri aşağıdaki gibi düzenliyoruz.
Video dosyası
Post dosyası:
Category dosyası:
Tabloların veritabanına yazılması için gerekli olan
php artisan migrate
kodu çalıştırıyoruz.
Yukarıdaki kodları sisteme ekledikten sonra Post ya da Video tablosuna bağlı Category bilgisini çekmek içinse
$category = Post::find(1)->category->title;
kodunu kullanabiliriz. Bu şekilde Post un bağlı olduğu Category nin title bilgisine ulaşabiliriz.
Polymorphic One To One Relation Ters Bağlantısı
Diğer ilişki çeşitlerinde olduğu gibi bu ilişkide de Post/Video bulduktan sonra Category bilgisine ulaşabildiğimiz gibi Category den de Post/Video bilgilerine ulaşabiliriz.
Bunu yapmak gerekli kod;
$category = Category::find(1); $categoryable = $category->categoryable;
Dikkat ederseniz herhangi bir Post / Video belirtmem gerekmiyor. Çünkü zaten Category tablosunda hangi model ile ilişkili olduğunu categoryable_type ve categoryable_id ile tutuyoruz.
Phphocasi.com.tr için yazdığım bu yazı umarım yardımcı olur. Daha fazla detaylı bilgi için laravel dökümanından yararlanabilirsiniz.
Tüm Laravel Derslerimiz için tıklayınız.
Phphocasi.com.tr üzerinden yayınladığım laravel eğitimlerine devam edeceğiz. Yazımız ile ilgili tüm sorularınızı yorum bölümden ulaştırabilirsiniz. Bunun dışındaki diğer sorularınız için sorucevap.phphocasi.com.tr sitesini kullanabilirsiniz.
Umarım sizin için yararlı olmuştur. Okuduğunuz için teşekkürler. Daha fazla kişinin okuması için paylaşmayı unutmayın…
7