Laravel'de Veritabanı İlişkileri: HasMany ve BelongsTo Kullanımı
Laravel'in Eloquent ORM'si veritabanı tablolarını ilişkilendirmek için güçlü araçlar sunuyor. HasMany ve BelongsTo en sık kullanılan ilişki türleridir.
Bir örnek üzerinden gidelim. Diyelim bir blog uygulamanız var. Her yazarın birden fazla yazısı olabilir, ama her yazı yalnızca bir yazara ait. Author ve Post tabloları arasında bu ilişkiyi kurmak için model sınıflarında tanım yaparsınız.
Author modeline HasMany eklersiniz:
1class Author extends Model2{3public function posts()4{5return $this->hasMany(Post::class);6}7}Post modeline BelongsTo eklersiniz:
1class Post extends Model2{3public function author()4{5return $this->belongsTo(Author::class);6}7}Bu tanımlar yapıldıktan sonra veriyi çekmek basit hale gelir. Bir yazarın tüm yazılarını almak için:
1$author = Author::find(1);2$posts = $author->posts()->get();Ya da bir yazının yazarını bulmak için:
1$post = Post::find(1);2$author = $post->author;Eager loading kullanarak N+1 problemini önleyebilirsiniz. Birden fazla yazıyı yazarlarıyla birlikte çekerken:
1$posts = Post::with('author')->get();Bu tek bir sorgu yerine her yazı için ayrı sorgu çalıştırmak yerine, tüm yazarları bir kez çeker.
ForeignKey adı Laravel'in kuralına uymuyorsa (örneğin author_id yerine creator_id), ikinci parametre olarak belirtebilirsiniz:
1return $this->belongsTo(Author::class, 'creator_id');Bu ilişkileri doğru kurduğunuzda, kodunuz daha temiz, okunabilir ve performanslı olur.
0 yorum