Laravel Eloquent One to Many İlişkisi

· PHP , MySQL ·

Laravel 6

Bugün Laravel'de one to many ilişkisi detaylı olarak nasıl kurulur bundan bahsedeceğim.

 

One to Many ilişkisi nedir?

One to Many

One to Many ilişkisi bir varlığın bir şeye fazla sayıda sahip olabileceğini ancak o şeyin sadece tek kişiye ait olabileceğini gösteren ilişki türüdür. Örnek vermemiz gerekirse kullanıcı ve yazıları ele alalım. Bir yazının birden fazla yazarı yani kullanıcısı olamazken bir kullanıcı sonsuz sayıda yazı paylaşabilir. One to Many ilişkisi bu mantıkla ilerleyen tüm ilişkilerde kullanacağımız türdür. Bu ilişkiyi tanımlayıp kullanabilmemiz için sonsuz sayıda sahip olunabilinen girdi üzerinde kullanıcıya dair unique(tekil) bir değer teşkil eden sütunu foreign key(yabancı anahtar) olarak göstermemiz gerekmektedir.

 

One to Many ilişkisi nasıl kurulur?

  • Öncelikle modellerinizi tanımlamanız gerekmektedir. Ben anlatımımda kullanıcı ve yazılar arasındaki ilişkiyi örnek göstererek ilerleyeceğim. Kullanıcı ve yazılar adında iki model açıp bunların fillable, guarded alanlarını tanımlayınız.

  • Veritabanı migrationlarımızı oluşturalım. Kullanıcı migrationumuzda ekstra bir işlem yapmamıza gerek yok. Yazılar migrationumuzda işlemlerimizi yapmaya başlayalım.
    $table->unsignedBigInteger('user_id'); komutu ile foreign keyimizin bulunacağı sütunu açıyoruz. Burada model ismine göre oluşturmanızda fayda bulunmaktadır.

  • Yazılar migrationumuzda foreign key sütunumuzu tanımladıktan sonra $table->foreign('user_id')->references('id')->on('users'); kod bloğunu kullanarak foreign keyimizin özelliklerini tanımlıyoruz.

  • Daha detaylı yaklaşmak gerekirse $table->foreign('key_ismi') foreign keyimizin adını göstermektedir. ->references('id') kısmı ise ilişkiyi kuracağımız diğer tablodaki hangi sütunu işaret ettiğimizi belirliyor. ->on('tablo_ismi') kısmı ise hangi tabloya bakması gerektiğini gösteriyor.

  • Migration üzerinde foreign key ilişkilerini tamamladıktan sonra kullanıcı modeli yani tekil olan modele geliyoruz. Alttaki kod bloğu ile ilişkiyi tamamlıyoruz:
    public function post()
    {
       return $this->hasMany(\App\User\Post::class, 'user_id');
    }

  • Yukarıdaki kod bloğunu açıklayacak olursak post fonksiyonu Eloquent hasMany ilişkisini döndüren bir fonksiyon çağırmakta. hasMany fonksiyonunun ilk argümanı hangi modeli kontrol edeceğinizi, ikinci argümansa o model için veritabanınızda hangi isimle foreign key oluşturduğunuzu gösteriyor.

  • Bu işlemleri tamamladıktan sonra örnek erişim için User::where('id', $id)->first()->post()->all() komutunu kullanarak tüm kullanıcıyla bağdaştırılmış yazıları getirebilirsiniz.

  • Örnek bir yazı oluştururken de controllerınızın store fonksiyonu zaten id alıyor, bu id'yi yazılar modelinizde fillable olarak gösterirseniz yeni bir yazı oluşturduğunuzda 'user_id' => $id şeklinde gönderdiğinizde ilişki kurulmuş olacak.

 

Umarım anlamanıza yardımcı olmuşumdur, anlamadığınız kısımları yorum bölümünde belirtirseniz yanıtlayacağım. Laravel ile ilgili daha fazla yazı okumak istiyorsanız Laravel Artisan Komutları makaleme de göz atmanızı öneririm.