Laravel Eloquent One to Many

Merhaba Mobilhanem.com takipçileri,
Laravel ile eğitim serimizin Laravel Eloquent Relation sistemine One to Many Relation (bireçok ilişki) yapısı ile devam ediyoruz. 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 One to Many Relation Nedir?

Bir önceki dersimizde sizinle One to One ilişkisini incelemiştik. One to One ilişkisi için örneğimiz bir kişinin yalnız bir tek TC Kimlik Numarası olmasıydı. Bu sefer işleyeceğimiz konu için ise bir tablo satırının (örneğin yazılar) diğer bir tablodan birden fazla satır ile ilişkili olmasıdır (örneğin yorumlar).

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

Parantez içerisinde verdiğimiz örnekten yola çıkarsak bir yazı ya da haberin birden fazla yorumu olabilir. Bunun için örnek bir veritabanı hazırlayalım.

php artisan make:model Post -m

kodunu yazarak Post adında bir model ve bu modele bağlı bir migration dosyası oluşturuyoruz. Oluşturduğumuz migration dosyasının içerisine

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

yazarak Post tablosunu basit bir şekilde oluşturuyoruz. Daha sonra ise yorumların yer alacağı tablomuz ve modelimizi oluşturmak için

php artisan make:model Comment -m

kodunu yazıyoruz ve yine migration içerisine

$table->integer('post_id');
$table->text('comment');

yazarak tablomuzu en basit hali ile oluşturuyoruz. İstersek (tabi aslında gerekli) comment tablosuna user_id yi de ekleyebiliriz.

Daha sonra

php artisan migrate

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

 One to Many Relation (bireçok ilişki) yapısı
One to Many Relation (bireçok ilişki) yapısı

Yukarıda yer alan görselde Post model dosyası içerisine Comment modeli ile One To Many ilişkisini sağlayacak olan comments() fonksiyonu yazıyoruz. Bu bağlantıyı sağladıktan sonra kodlarımızda yapmamız gereken sadece

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

kodunu yazmak. Bu satır sayesinde yazımıza gelen tüm yorumları 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 post_id yerine yazi_id kullanmak istersek bunun için modelde yer alan comments fonksiyonunda ufak bir değişiklik yapmamız gerek.

return $this->hasMany('App\Comment', 'yazi_id');

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

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

Bir önceki ilişki yapımızda da belirttiğimiz gibi yazıların yorumlarımı bulabileceğimiz gibi yorumdan da yazıyı bulabiliriz.

 One to Many Relation (bireçok ilişki) yapısı
One to Many Relation (bireçok ilişki) yapısı

Yukarıda yer alan ekran görüntüsünde belongsTo kullandığımızı görebilirsiniz. Bu bir önceki One to One ilişkisi ile aynı değişkendir.

Bu ilişkiyi kodlarımızda

$post = Comment::find(1)->post->title;

şeklinde kullanabilir ve post tablomuzdaki istediğimiz veriye sadece yorum id si kullanarak alabiliriz.

Yine yukarıdaki gibi 2. parametreyi kullabilirsiniz.

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…

27

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...

9 Yorum

  • Onur selamlar, vakit ayırıp uzun uzun doküman yazdığın için teşekkür ederim. Bunun gibi içeriklere çok ihtiyacımız var.

    Daha sonraki derslerinde belki faydalı olur diye bir iki eleştirim olacak. Affına sığınıyorum.

    8. dersten sonra birden ekran görüntülerinde derste belirtmediğin kodlar çıkmaya başladı.

    Daha önemlisi tüm bu derslerin ardından ortaya elle tutulur gözle görülür bir sayfa çıkartmadık.

    Bir üye formu veya bir sayfa ekleme, tasarıma kodların yerleştirilip çağırılması konusu anlaşılabilir olması bakımından çok daha faydalı olacaktır diye düşünüyorum.

    One to One ve One to Many derslerinin sıralaması karışmış.

    Sevgiler,

    • Merhaba, eleştirileri benim için çok önemli. Öncelikle şu anda laraveli anlatmaya çalışıyorum. Yani yapısal olarak ne nedir, nasıl kullanılır gibi. Bu derslerin bitiminde temelini sağladıktan sonra diğer bölümlere de geçeceğiz. Benim görüşüme göre temeli olması gerek ki daha sonrasında sağlam gidilebilsin. Derslerin ekran görüntülerine tekrar bakacağım ve düzeltmeye çalışacağım. Sıralamayı tekrar düzenledim. Tüm eleştiriler için teşekkür ederim.

      • Onur tekrar selamlar, Laravel’de biraz yol katedince derslerinin çok anlaşılır olduğunun farkına vardım 🙂

        Hakkını yemiş olmayayım 🙂

  • Merhaba, hasMany ve belongsToMany arasında ki fark nedir acaba. belongsToMany konusundan bahsetmeniz faydalı olurdu.Teşekkürler

    • Merhaba,

      Öncelikle yorumunuz için teşekkürler. hasMany bir tablonun başka bir tabloda birden fazla olma durumudur. Örnek vermem gerekirse bir kişinin birden fazla telefonu olabilir ama bir telefon numarası sadece bir kişinin olabilir. belongsToMany de ise iki tabloda birbiri ile birden fazla kez ilişkide olabilir.Yine örnek vermek gerekirse bir yazının birden fazla kategorisi olabilir ve bir kategori de birden fazla yazı ile bağlantılı olabilir.

  • Merhaba,
    İngilizce dökümantasyonlar ile bir şekilde uyguluyordum. Fakat mantığını tam anlamıyla kavramak açısından ilişkileri Türkçe anlatman çok iyi olmuş.

    Ellerine sağlık 🙂

Haftalık Bülten

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