Skip to main content

Laravel ile Eloquent ORM Kullanarak Veritabanı Modeli Oluşturma

Bu rehberde, Laravel framework'ü içinde yer alan Eloquent ORM (Nesne İlişkisel Eşleyici) kullanarak nasıl veritabanı modeli oluşturacağınızı öğreneceksiniz. Eloquent, veritabanı tabloları ile nesne tabanlı bir yaklaşımla etkileşim kurmanızı sağlar ve SQL sorguları yazmayı kolaylaştırır. Bu rehber, Laravel Artisan'ın make:model komutunu kullanarak links tablosu için bir Link model sınıfı oluşturmayı anlatır. Amaç, veritabanı tablolarını nesne olarak temsil etmektir ve model oluşturulduktan sonra ek bir yapılandırmaya gerek yoktur.

1. Eloquent ORM ve Model Kavramları

Eloquent, Laravel'in varsayılan olarak gelen güçlü bir ORM aracıdır ve veritabanı işlemlerini kolaylaştırmayı amaçlar. Eloquent'in sağladığı avantajlardan bazıları şunlardır:

  • Model ve Tablolar: Her model sınıfı, veritabanınızdaki tek bir tabloyu temsil eder.
  • Tablo Adı Çoğul Kuralı: Eloquent, model adının çoğul halini alarak tablo adını otomatik olarak eşler. Örneğin, Link modeli, links tablosuyla eşleşir.

2. Artisan İle Model Sınıfı Oluşturma

Eloquent ORM ile veritabanı tabloları üzerinde işlem yapabilmek için önce Laravel’in Artisan CLI aracını kullanarak model sınıfı oluşturmanız gerekmektedir.

Model Oluşturma Komutunu Çalıştırma

Artisan komut satırı aracını kullanarak yeni bir Link model dosyası oluşturabilirsiniz:

docker-compose exec app php artisan make:model Link

Bu komut, uygulamanın app/Models/ dizinine Link.php dosyasını oluşturur.

Komutun çıktısında şu mesajı görmelisiniz:


Model created successfully.

Oluşturulan Dosyayı İnceleme

Oluşturulan Link.php dosyası, temel bir model şablonunu içerir:


// app/Models/Link.php
<?php

namespace App\Models;

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

class Link extends Model
{
use HasFactory;
}

Bu sınıf, Laravel'in temel Model sınıfından türetilmiştir ve şu anda ek bir yapılandırma gerektirmez. Model, Eloquent kurallarına göre links tablosuyla eşleşmeye hazırdır.


3. Modelin Faydaları ve Kullanımı

Modeli oluşturduktan sonra, Eloquent üzerinden veritabanı ile nesne tabanlı etkileşim kurmaya başlayabilirsiniz. Eloquent sayesinde, SQL yazmak yerine nesne tabanlı bir şekilde CRUD (Oluşturma, Okuma, Güncelleme, Silme) işlemleri gerçekleştirebilirsiniz.

Veri Yönetimi

Veritabanı üzerinde CRUD işlemleri yapabilirsiniz:

Oluşturma: Yeni veri ekleme işlemi

Okuma: Veritabanından veri çekme

Güncelleme: Mevcut verileri güncelleme

Silme: Veritabanından veri silme

İlişki Tanımlama

Uygulamanızı daha geniş hale getirebilirsiniz. Örneğin, bir modelin diğer modellerle olan ilişkilerini tanımlayabilirsiniz. İlişkiler için hasMany, belongsTo gibi metotlar kullanabilirsiniz.

Özel Metotlar

Model sınıfına, veritabanı sorgularını içeren özel işlevler ekleyebilirsiniz.


4. Sıkça Sorulan Sorular (SSS)

  1. Model ve Migration arasındaki ilişki nedir?

Migration, veritabanı tablosunun yapısını (şema) oluşturur ve yönetir. Model ise bu yapı üzerinden tablodaki kayıtlarla (veri) etkileşim kurmanızı sağlar.

  1. Model adımı tablo adıyla eşleştirmek istemezsem ne yapmalıyım?

Eğer model adı çoğul kuralına uymuyorsa veya tablo adınız farklıysa, model sınıfınızın içine $table özelliğini ekleyerek tablo adını belirtebilirsiniz:


protected $table = 'baglantilar';
  1. HasFactory nedir ve ne işe yarar?

HasFactory özelliği, modelinize bir Fabrika (Factory) ekler. Bu, özellikle test ve tohumlama (Seeding) sırasında sahte veriler oluşturmak için kullanılır.

  1. Toplu atama (Mass Assignment) nedir ve neden tehlikelidir?

Toplu atama, kullanıcıdan gelen tüm veriyi doğrudan bir Model’e topluca kaydetmektir. Tehlikesi, kötü niyetli bir kullanıcının izin verilmemesi gereken sütunları (örneğin is_admin) değiştirebilmesidir. Bu risk, $fillable veya $guarded özellikleri kullanılarak engellenir.