Laravel Eloquent ORM ve Model Kullanımı

Laravel Eloquent ORM ve Model Kullanımı

İçindekiler

Laravel Eloquent ORM ve Model Kullanımı

Laravel, veritabanı işlemlerini daha kolay ve anlaşılır hale getiren Eloquent ORM (Object Relational Mapping) sistemini kullanır. Eloquent, her veritabanı tablosu için bir model oluşturmanıza ve bu model üzerinden CRUD işlemlerini basit SQL sorgularına ihtiyaç duymadan gerçekleştirmenize olanak tanır.


1️⃣ Eloquent Model Oluşturma

Laravel’de yeni bir model oluşturmak için Artisan komutunu kullanabilirsiniz:

php artisan make:model Post

Bu komut, app/Models/Post.php dosyasını oluşturur. Eğer model ile birlikte bir migration da oluşturmak isterseniz:

php artisan make:model Post -m

Bu komut hem Post modelini hem de Post tablosunu oluşturacak bir migration dosyasını hazırlar.


2️⃣ Model İçinde Tanımlamalar

Model dosyamızın içinde veritabanı tablomuza dair tanımlamalar yapabiliriz. Örneğin:

namespace App\Models;

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

class Post extends Model
{
    use HasFactory;

    protected $table = 'posts'; // Eğer model adı ile tablo adı farklıysa tanımlanır
    protected $fillable = ['title', 'content']; // Form ile toplu veri ekleme için izin verilen alanlar
}
  • $table değişkeni, modelin hangi tabloya bağlanacağını belirler.
  • $fillable dizisi, toplu veri eklemelerinde güvenlik için belirlenen alanları ifade eder.

Web Doktoru - Laravel Eloquent ORM ve Model Kullanımı
Laravel Eloquent ORM ve Model Kullanımı

3️⃣ Eloquent ile Veritabanı İşlemleri

Veri Ekleme (INSERT)

$post = new Post();
$post->title = "Laravel ORM Kullanımı";
$post->content = "Eloquent ORM ile veritabanı işlemleri çok kolay!";
$post->save();

Alternatif olarak:

Post::create([
    'title' => "Laravel ORM",
    'content' => "ORM kullanarak veritabanı yönetimi!"
]);

Not: create() metodunun çalışması için $fillable içinde ilgili sütunların tanımlı olması gerekir.


Veri Getirme (SELECT)

Tüm Verileri Getirme

$posts = Post::all();

Belirli Bir Kayıdı Getirme

$post = Post::find(1); // ID = 1 olan kaydı getirir

Koşullu Veri Getirme

$posts = Post::where('title', 'Laravel ORM')->get();

Veri Güncelleme (UPDATE)

$post = Post::find(1);
$post->title = "Laravel Eloquent ORM Güncelleme";
$post->save();

Alternatif olarak:

Post::where('id', 1)->update(['title' => 'Yeni Başlık']);

Veri Silme (DELETE)

$post = Post::find(1);
$post->delete();

Alternatif olarak:

Post::destroy(1);

Not: destroy() metodu ile birden fazla ID’yi aynı anda silebilirsiniz:

Post::destroy([1, 2, 3]);

4️⃣ Eloquent İlişkiler (Relationships)

Laravel, veritabanı tabloları arasında ilişkileri kolayca yönetmenizi sağlar. İşte bazı temel ilişkiler:

One to One (Bire Bir) İlişki

class User extends Model
{
    public function profile()
    {
        return $this->hasOne(Profile::class);
    }
}

One to Many (Bire Çok) İlişki

class Post extends Model
{
    public function comments()
    {
        return $this->hasMany(Comment::class);
    }
}

Many to Many (Çoktan Çoğa) İlişki

class Post extends Model
{
    public function tags()
    {
        return $this->belongsToMany(Tag::class);
    }
}
  • Bu kod, Post modeli ile Tag modeli arasında bir çoktan çoğa ilişki tanımlar.
  • belongsToMany metodu, bu ilişkiyi kurmak için kullanılır.
  • İlişki, veritabanında bir ara tablo (post_tag) üzerinden yönetilir.
  • Bu ilişki sayesinde, bir gönderiye ait etiketleri kolayca çekebilir, yeni etiketler ekleyebilir veya mevcut etiketleri güncelleyebilirsiniz. Aşağıda yukarıda yer alan kısa kodun geniş açıklamasını bulabilirsiniz.

1️⃣ class Post extends Model

  • Bu satır, Post adında bir sınıf tanımlar ve bu sınıf, Laravel’in Model sınıfından türetilir.
  • Model sınıfı, Laravel’in Eloquent ORM (Object-Relational Mapping) sisteminin bir parçasıdır. Bu sınıf, veritabanı tablolarıyla etkileşim kurmayı kolaylaştırır.
  • Post modeli, veritabanındaki posts tablosuyla eşleşir. Bu tablo, blog gönderileri veya benzer içerikleri saklar.

2️⃣ public function tags()

  • Bu satır, tags adında bir metot tanımlar. Bu metot, Post modeli ile Tag modeli arasındaki ilişkiyi temsil eder.
  • Metot adı (tags), ilişkinin adını belirtir. Bu isim, ilişkinin doğasını anlamak için önemlidir.

3️⃣ return $this->belongsToMany(Tag::class);

  • Bu satır, Post modeli ile Tag modeli arasında çoktan çoğa (many-to-many) bir ilişki tanımlar.
  • belongsToMany metodu, Laravel’in Eloquent ORM sisteminde çoktan çoğa ilişkileri kurmak için kullanılır.
  • Tag::class, ilişkinin kurulacağı modeli belirtir. Bu durumda, Tag modeli ile ilişki kurulur.

 Çoktan Çoğa İlişki Nedir?

  • Çoktan çoğa ilişki, iki model arasında birden fazla kaydın birbiriyle ilişkilendirilebileceği bir ilişki türüdür.
  • Örneğin, bir blog gönderisi (Post) birden fazla etikete (Tag) sahip olabilir ve bir etiket de birden fazla blog gönderisiyle ilişkilendirilebilir.
  • Bu tür ilişkiler, veritabanında bir ara tablo (pivot table) kullanılarak yönetilir. Bu ara tablo, iki modelin birincil anahtarlarını (primary keys) içerir.


📌 Sonuç

Eloquent ORM, Laravel’in en güçlü özelliklerinden biridir ve veritabanı işlemlerini oldukça kolay hale getirir. CRUD işlemlerini minimal kod ile gerçekleştirmek, model ilişkilerini tanımlamak ve yönetmek için oldukça kullanışlıdır.

🚀 Bir sonraki adım: Laravel’de Migration ve Seeder Kullanımı 🎯

Picture of Web Doktoru
Web Doktoru
Matematikçi, Adli Bilişim Uzmanı, Bil. Yük. Müh. Full Stack Developer
İlginizi Çekebilir
Web Doktoru - Laravel’de Real-Time (Gerçek Zamanlı) Bildirimler

Laravel’de Real-Time (Gerçek Zamanlı) Bildirimler

Laravel’de Real-Time (Gerçek Zamanlı) Bildirimler Laravel, modern web uygulamalarında gerçek zamanlı bildirimler oluşturmak için güçlü araçlar sunar. WebSockets, Pusher, Laravel Echo ve Broadcasting gibi teknolojiler

Web Doktoru - Laravel’de Mail Gönderme ve Bildirimler 📩

Laravel’de Mail Gönderme ve Bildirimler 📩

Laravel’de Mail Gönderme ve Bildirimler Laravel, modern web uygulamaları geliştirirken e-posta gönderimi ve bildirim sistemleri gibi ihtiyaçları kolayca karşılamak için güçlü araçlar sunar. Bu yazıda,

Whatsapp ile mesaj göndermek için tıklayın

Telefon ile sadece 09:00 - 18:00 saatleri arası ulaşabilirsiniz.