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.
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 ileTag
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’inModel
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ındakiposts
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 ileTag
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 ileTag
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ı 🎯
Laravel Eğitimi Konular
- Laravel Nedir ve Neden Kullanılmalı?
- Laravel Kurulumu (Composer ile Adım Adım Rehber)
- Laravel Proje Yapısı ve MVC Mimarisi
- Laravel Routing ve Controller Kullanımı
- Laravel Middleware Kullanımı
- API isteklerinde middleware kullanımı
- Laravel Migration ve Seeder Kullanımı
- Laravel Factory ve Faker ile Test Verisi Üretme
- Laravel’de API Kullanımı ve Token Bazlı Authentication
- Laravel Rol ve Yetkilendirme İşlemleri
- Laravel’de Cache ve Performans Optimizasyonu
- Laravel’de Queue (Kuyruk) Kullanımı ve Arka Plan İşlemleri
- Laravel Event & Listener Kullanımı
- Laravel’de Scheduler (Zamanlanmış Görevler) Kullanımı: Otomatik İşlemler ve Zaman Yönetimi
- Laravel’de Test Driven Development (TDD) ve Test Yazımı