PHP 8 ile Laravel kullanırken Models (modeller), veritabanı tablolarını temsil eden ve bu tablolara erişimi yönetmek için kullanılan sınıflardır. Modeller, veritabanındaki verileri nesne yönelimli bir şekilde yönetmeye olanak tanır ve genellikle uygulamanızın iş mantığıyla veritabanı etkileşimini soyutlar.
1. Model Nedir?
Model, veritabanındaki bir tabloya karşılık gelen bir sınıftır. Her model, genellikle bir tablo ile ilişkilidir ve bu tabloya ait verileri almak, güncellemek, silmek veya oluşturmak için yöntemler sağlar. Laravel, Eloquent ORM (Object-Relational Mapping) kullanarak modeller ile veritabanı arasındaki etkileşimi kolaylaştırır.
2. Model Oluşturma
Yeni bir model oluşturmak için terminalde aşağıdaki komutu kullanabilirsiniz:
php artisan make:model Post
Bu komut, app/Models
dizininde Post.php
adında bir model dosyası oluşturur.
3. Model Yapısı
Oluşturulan model dosyası genellikle şu şekilde görünür:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
class Post extends Model {
use HasFactory; // Fabrika kullanımını etkinleştirir
protected $fillable = ['title', 'content']; // Kütüphane ile doldurulabilecek alanlar
}
4. Model Özellikleri
-
$fillable: Bu dizi, toplu atama (mass assignment) için hangi alanların kullanılabileceğini belirtir. Örneğin, bir formdan alınan verilerin hangi alanlara doldurulabileceğini kontrol edebilirsiniz.
-
**
-
**
protected $table = 'my_custom_table_name';
-
$primaryKey: Varsayılan olarak
id
olan birincil anahtarınız farklı bir ad ise, bunu belirtmek için bu özelliği kullanabilirsiniz.
protected $primaryKey = 'post_id';
5. Temel Eloquent İşlemleri
Eloquent, modeller aracılığıyla veritabanı ile etkileşimi kolaylaştırır. Aşağıda bazı temel Eloquent işlemleri bulunmaktadır:
5.1. Veri Alma
$posts = Post::all(); // Tüm kayıtları al
$post = Post::find(1); // ID'si 1 olan kaydı al
5.2. Yeni Kayıt Oluşturma
$post = new Post();
$post->title = 'Yeni Başlık';
$post->content = 'Yeni içerik';
$post->save(); // Kaydı veritabanına kaydet
Ya da toplu atama ile:
Post::create([
'title' => 'Yeni Başlık',
'content' => 'Yeni içerik'
]);
5.3. Kayıt Güncelleme
$post = Post::find(1);
$post->title = 'Güncellenmiş Başlık';
$post->save(); // Kaydı güncelle
5.4. Kayıt Silme
$post = Post::find(1);
$post->delete(); // Kaydı sil
6. İlişkiler
Laravel, modeller arasında ilişkileri tanımlamanıza olanak tanır. Örneğin, bir User
modelinin birçok Post
modeline sahip olduğunu düşünelim:
class User extends Model {
public
function posts(
) {
return $this->hasMany(Post::class);
}
}
class Post extends Model {
public
function user(
) {
return $this->belongsTo(User::class);
}
}
Bu ilişkileri kullanarak ilgili verileri alabilirsiniz:
$user = User::find(1);
$posts = $user->posts; // Kullanıcının tüm gönderilerini al
$post = Post::find(1);
$user = $post->user; // Gönderinin yazarını al
7. Scope'lar
Eloquent'ta query scope'lar, belirli bir sorgu mantığını tekrar kullanmak için tanımlayabileceğiniz özel yöntemlerdir.
class Post extends Model {
public
function scopePublished(
$query
) {
return $query->where('published', true);
}
}
// Kullanımı
$publishedPosts = Post::published()->get();
8. Eloquent Fabrikaları
Eloquent fabrikaları, test veya geliştirme sırasında model örnekleri oluşturmak için kullanılır. Fabrikalar, belirli bir modelin rasgele verilerle doldurulmuş örneklerini oluşturmanıza olanak tanır.
php artisan make:factory PostFactory --model=Post
Daha sonra database/factories/PostFactory.php
dosyasını düzenleyerek modelin nasıl örnekleneceğini tanımlayabilirsiniz.
Sonuç
Modeller, Laravel ile web uygulamaları geliştirirken veritabanı etkileşimini yönetmek için önemli bir bileşendir. Eloquent ORM ile modeller arasında kolay ve anlaşılır bir iletişim kurabilirsiniz. Modellerin sunduğu ilişkiler, sorgu kapsamları ve fabrikalar gibi özellikler, uygulamanızı daha esnek ve modüler hale getirir. Laravel’in güçlü model yapısı sayesinde veritabanı işlemlerinizi daha etkin bir şekilde yönetebilirsiniz.