Laravel Eloquent Many to Many

Merhaba Mobilhanem.com takipçileri,
Laravel ile eğitim serimizin Laravel Eloquent Relation sistemine Many to Many Relation (çokaçok ilişki) yapısı ile devam ediyoruz. Uzun bir ara olduğunu biliyorum öncelikle bunun için kusura bakmayın. Bu zaman içerisinde yazdığınız yorumlara teşekkür ederim. Her yorumunuza hızlı bir şekilde cevap vermeye çalıştım. Sizin yorumlarınız çok önemli lütfen paylaşım ve yorumlarınızı bizden esirgemeyin. Biliyorsunuz mobilhanem PHP ailesi olarak gelişiyoruz. Artık Laravel yapısının 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 Many to Many Relation Nedir?

Bir önceki dersimizde sizinle One to Many ilişkisini incelemiştik. Önceki dersimizde bir arkadaşımız aslında One to Many ile Many to Many nin farkını yorum olarak sormuştu. Şu şekilde düşünebiliriz. Bir kişinin birden fazla telefon numarası olabilir ama bir telefon numarası sadece bir kişiye aittir. Bu örnek One to Many içindi. Many to Many içinse bir yazının birden fazla kategorisi olabilir ve bir kategori de birden fazla yazıyla bağlantılı olabilir.

Laravel Eloquent Çokaçok Relation Bağlantısı

Yukarıdaki örnekten devam etmek gerekirse öncelikle bir Post ve bir de Category model ve migration larını hazırlayalım.

php artisan make:model Post -m
php artasan make:model Category -m

kodunu yazarak Post ve Category adında modeller ve bu modellere bağlı migration dosyalarını oluşturuyoruz. Oluşturduğumuz Post migration dosyasının içerisine

$table->string('title');
$table->text('detail');

yazarak Post tablosunu basit bir şekilde oluşturuyoruz. Daha sonra ise kategolerinin migration içerisine

$table->string('title'); 
$table->text('detail');

yazarak tablomuzu en basit hali ile oluşturuyoruz. Daha sonra Many to Many ilişkisini kurmamıza yarayacak olan category_post tablosunu manuel olarak biz veritabanında oluşturuyoruz. Bunun modeli ve/ya increment key i olması gerekli değildir.

Daha sonra

php artisan migrate

oluşturduğumuz migration dosyasını veritabanımıza yazıyoruz.

laravel many to many relation
laravel many to many relation

Yukarıda yer alan görselde Post model dosyası içerisine Category modeli ile Many To Many ilişkisini sağlayacak olan categories() fonksiyonu yazıyoruz. Burada dikkat etmemiz gereken alfabetik olarak dizilmesidir. Yani mutlaka category_post olarak vermeliyiz ismini. Bu tablonun kolonlarını ise post_id ve category_id olarak girebiliriz. Bu bağlantıyı sağladıktan sonra kodlarımızda yapmamız gereken sadece

$categories = Post::find(1)->categories()->get();

kodunu yazmak. Bu satır sayesinde yazımızın kategorilerini listeleyebiliriz. Burada unutmamamız gereken ise bu kod satırının bir array döndürdüğüdür. Yani eğer böyle bir veri ilişkisi sağlarsak oluşan değişkenimizin ekrana basılması için foreach gibi bir döngü kullanmamız gereklidir. Eğer biz alfabetik olarak tablo oluşturmayacaksak ya da post_id yerine yazi_id kullanmak istersek bunun için post modelde yer alan categories fonksiyonunu

return $this->hasMany('App\Category', 'post_category', 'yazi_id', 'kat_id');

bu değişiklik sonrası tablolarımızda ilişkisel kolonlarımızı belirtmiş olduk.

Laravel Eloquent Many to Many Relation Ters Bağlantısı

Bu bağlantı ilişkisinde güzel olan taraflardan biri de ters durumu için yine belongstoMany kullanıyor olmamız. Yani bu ilişiki için farklı bir isim kullanmamız gerekmiyor.

laravel many to many relation
laravel many to many relation

 

Burada daha açıklayıcı olabilmesi için kullanılan tüm parametreleri ekledim. Yukarıda gördüğünüz gibi ilk parametre model ismi, ikinci parametre tablo adı ve kolon adları olarak devam ediyor.

Yine aynı şekilde

$posts = Category::find(1)->posts()->get();

id si bir olan kategorinin içerdiği tüm yazıları görebiliriz.

Mobilhanem.com için yazdığım bu yazımda Laravel Eloquent One to Many Relation yapısından bahsetmeye çalıştım. Daha fazla detaylı bilgi için laravel dökümanından yararlanabilirsiniz.

Tüm Laravel Derslerimiz için tıklayınız.

Mobilhanem.com ü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.mobilhanem.com 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…

80

Onur Üre

Aslen jeoloji mühendisi olup hiç mesleğini yapmaya fırsat bulamayan ve gönlünde hep bilgisayar ve programlama olan, evden (home-office) çalışma şekline bayılan, evli, 2 kedi ve 1 tavşan babası, sokaktaki her köpek, kedi, kuşun abisi olmaya çalışan biriyim. Lütfen bir kap su bir kap yemek her köşe başına...

4 Yorum

  • Güzel paylaşımlarınız için teşekkürler. Burada anlamadığım kısım neden pivot tabloyu manuel olarak oluşturuyoruz? Laravelin yeni sürümlerinde bunu otomatik yapıyor olma ihtimali var mıdır?

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?