Laravel Relationship Kullanımı

Laravel Relationship Kullanımı

Hepinize merhaba dostlarım 😊. Hazır pazar günü gelmişken bir konu daha ateşleyelim diyesim geldi normalde böyle bir giriş yapmıyorum siz de biliyorsunuz 😅. Her neyse dostlarım bugün bomba gibi bir konuya giriş yapalım

Dostlarım konuyu daha fazla uzatmadan siz de demişsinizdir içinizden

Acaba hocamızın bu kadar güzel şekilde heyecaanlı heyecanlı anlattığı şey nedir ki 😅.

dediğiniz çok ama çok açık şekilde belli dostlarım. Ben de sözü daha fazla uzatmadan sizlere bu makalemizde işleyeceğimiz konudan bahsedeyim. Bu makalemizde Laravel Framework üzerinde sıklıkla kullanılan ve benim laravele geçme sürecimde bir tane yazılımcı abinin sıklıkla önerdiği yapıdan yani Relationship yapısından bahsedeceğim. Konumuza giriş yapmadan önce nedir bu relationship gelin ona yakından bir bakalım dostlarım

Nedir Bu Relationship ?

Eveeeet dostlarım artık sözü daha fazla uzatmadan gelelim Relationship yapımıza. İngilizce ilişki anlamından gelen bu kelimenin bizim Laravel Framework'ümüz üzerinde iki tabloların birbiriyle ilişki kurmasında son derece katkıda bulunuyor. Şimdi içinizden diyorsunuzdur

Hocam biz zaten bunu left join inner join vs gibilerle ayarlıyorduk

Evet doğru dediniz onlarla da ayarlıyoruz. Ama biliyorsunuz siz de Laravel Framework bizim için inanılmaz hız sağlıyor ORM ile bunu biliyoruz. İşte bu durumda normalde Left Join kullanarak Query Builder yapısından kurtararak dah temiz daha Best Practice bir yapı ile iki tabloyu ilişkilendirmiş oluyoruz 😊. Şimdi nasıl olduğunu merak ediyorsunuz ve bu çok güzel bir şey. Özellikle öğrenme adına aşırı güzel bir şey. O halde sözü daha fazla uzatmadan hemen kodlamamıza geçişimizi yapalım dostlarım.

Relationship Yapımızı Oluşturalım

Artık geldik en ama en heyecanlı yere dostlarım. Özellikle beni heyecanlandıran kısımlardan birisi olan kodlama kısmına geçişimizi yapalım. O halde ne duruyoruz hemen proje ortamlarımızı kuralım 😊. Ben örnek olarak

laravel new rs

komutunu yazdım. Kendi kendine kurulmaya başlayacak biliyorsunuz dostlarım 😊. Şimdi bu kısımdan sonra 2 tane tablo kuralım. Örnek olarak kategoriler ve urunler olarak 2 tablomuz olacak. Öncelikle migration ile Ürünler tablomuzu oluşturalım. Hemen konsoldan proje dizinimize gelelim ve içerisine

 php artisan make:model UrunlerModel -m

komutunu yazalım. Daha sonra migration dosyamıza gelelim ve içerisine aşağıdaki kodlarımızı yazalım

   public function up()
    {
        Schema::create('urunler', function (Blueprint $table) {
            $table->id();
            $table->string('name')->nullable();
            $table->string('price')->nullable();
            $table->integer('kategori_id')->nullable();
            $table->softDeletes();
            $table->timestamps();
        });
    }

şeklinde up() methodunun altına kodlarımızı yazdık. Bunu migrate edelim. Hemen terminal ekranımıza gelip

php artisan migrate

komutunu yazıp Enter tuşuna basalım. Bu tabloyu veri tabanı kısmına bizim için hızlıca oluşturacaktır dostlarım. Bunu yazdıktan sonra dostlarım tekrardan bir migrate dosyası daha oluturalım. Hemen terminalden bunun kodunu da

 php artisan make:model KategoriModel -m

şeklinde yazalım. Bunu da yazdıktan sonra migration dosyamıza gelip 

 public function up()
    {
        Schema::create('kategori', function (Blueprint $table) {
            $table->id();
            $table->string('name')->nullable();
            $table->softDeletes();
            $table->timestamps();
        });
    }

şeklinde kodlarımızı yazalım. Bunu da migrate edelim dostlarım hızlıca. 

Migrate olayını da yaptıktan sonra model dosyalarımızda ayarlamamızı yapalım. Hemen once UrunlerModel dosyamızın içerisine gelelim ve

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class UrunlerModel extends Model
{
    use HasFactory;
    use SoftDeletes;

    protected $guarded = [];
    protected $table = "urunler";
}

şeklinde ayarlamamızı yapalım. Daha sonrasında da KategoriModel dosyamıza gelelim ve içerisine

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class KategoriModel extends Model
{
    use HasFactory;
    use SoftDeletes;

    protected $guarded = [];
    protected $table = "kategori";
}

şeklinde kodlarımızı yazalım. Örnek olarak veri ekleyelim tablomuzdan. 2 marka ve 2 ürün gireceğim hızlıca. Ben bu verileri elle ekledim dostlarım yani bazı alanlar boş yani onlara sıkıntı etmeyin 😊.

Hemen urunler tabloma eklediğim verilere bir bakalım

şeklinde ürünleri ekledim bu kısma kadar tamamım. Şimdi bir de kategoriler tablomuzu açalım oraya da bir göz atalım

şeklinde kategoriler tablomuzu da ufaktan dolduralım. 

Şimdi bu kısma kadar tamam isek dostlarım hızlıca kodların yazım işlemine geçelim. Öncelikle dostlarım KategorilerModel dosyamızı açalım ve içerisine

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class KategoriModel extends Model
{
    use HasFactory;
    use SoftDeletes;

    protected $guarded = [];
    protected $table = "kategori";

    /** URUNLER RELATIONSHIP **/
    public function urunler(){
        return $this->hasMany(UrunlerModel::class,'kategori_id','id');
    }
}

şeklinde bir relationship yazdık. Burada kategoriler tablomuzu urunler ile ilişkilendirdik. Şimdi ise UrunlerModel kısmımızın ayarlanma islemini gerceklestirelim

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class UrunlerModel extends Model
{
    use HasFactory;
    use SoftDeletes;

    protected $guarded = [];
    protected $table = "urunler";

    /** KATEGORI RELATIONSHIP **/
    public function kategori(){
        return $this->belongsTo(KategoriModel::class,'kategori_id','id');
    }
}

şeklinde kodlarımızı ayarlama işlemini gerçekleştirelim. Şimdi dostlarım aklınıza şu takılmış olabilir

Hocam şimdi bir dosyaya HasMany yazıp Diğerine BelongsTo yazmamızdaki amaç nedir ?

şeklinde sorular vardır. Benim de ilk defa bu konuyu gördüğümde aklıma bu konular çok sık takılıyordu. Olayın mantığı şu:

Şimdi dostlarım gördüğünüz üzere bir tane Ürünler, bir tane de Kategoriler tablomuz var. Bizim ürünler tablomuz her bir kategoriye ait olduğu için ÜrünlerModel sayfamızda biz "Bu Dosya Kategorilere Ait Olacaktır" şeklinde bir emir veriyoruz yani BelongsTo komutunu kulllanıyoruz

KategorilerModel dosyamızda da bizim hasMany komutunu kullanmamızın sebebi de "Bizim belirli bir kategorimize ait birden fazla urun olabilir" şeklinde bir tanımlama ayarlıyoruz.

Mantık tamamen bu şekilde dostlarım. Olaylar tamamen bu şekilde olacaktır. Şimdi ek bir controller dosyası oluşturmadan dostlarım web.php içerisinde kodlarımızı hızlı bir şekilde yazalım 😊. Hemen web.php dosyamızın içerisine gelip

<?php

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    $urunler = \App\Models\UrunlerModel::with('kategori')->get();
    dd($urunler);
});

şeklinde kodlarımızı yazdık. Bu kısımda da karşınıza yeni bir method geldi with() olarak 😊. Şimdi diyorsunuz bana

Bu makalede atomu parçalama konusu haricinde her şeyi yaptınız hocam 😅. With komutu da nereden geldi 😊

şeklinde espri yapmanız hoşuma gidiyor dostlarım 😊. Burada biz aslında yazılıma şöyle bir emir veriyoruz

Dostum senin ürünler tablosunu karşıma getirmeni istiyorum. Ama sen bunu ilişkili olduğun Kategoriler tablosuyla eşleşerek getir 😊

şeklinde tatlı bir emir veriyoruz. Ve bizim kadim dostumuz Laravel ise bizi kırmadan karşımıza

şeklinde bizim karşımıza çıktıları sorunsuz bir şekilde getirdi dostlarım 😊. 

Eveeet dostlarım bu yazımda sizlere Laravel Framework üzerinde RelationShip Kullanımı konusundan yani tablo ilişkilendirme işleminden elimden geldiğince dilim döndüğünce bahsettim. Umarım faydalı olmuşumdur. Normalde hasMany kullanımı haricinde hasOne kullanımını da anlatmak isterdim lakin özel sorunlar sebebiyle araştırma vaktim olmadı. Bunlar haricinde eksik veya hatalı bir anlatım yapmış isem benimle iletişime geçmekten çekinmeyin 😊.

Konu başlarda biraz karmaşık veya zor gelebilir dostlarım anlıyorum. Özellikle öğrenme süreci içerisindeyseniz bu şekilde olaylarla karşılaşmanız son derece doğaldır. Bu süreç içerisinde dostlarım her yazımda da dediğim gibi "İstikrarlı ve Azimli Olmalısınız. Bolca Pratik Yapmalısınız 😊.". Bu dediklerimi hayat felsefesi yaptığınız sürece başarı sizler için kaçınılmaz olacaktır 😊.

Hayallerinizi gerçekleştirmeniz ve güzel yerlere gelmeniz dileklerimle... İyi çalışmalar dilerim 😊

Muhammed Fatih BAĞCIVAN
Yazar Hakkında

Kendi Halinde Bir Backend Developer

Önceki YazıLaravel Mutator Kullanımı
Sonraki YazıPHP ile Gzip İşlemi
Yorumlar (0)
Bu Yazıya Ait Hiçbir Yorum Bulunamadı (veya admin onaylamadı). İlk Yorum Yapan Sen Ol
Yorum Yapabilirsiniz