Onur Evren

Laravel Eloquent ORM: En İyi Uygulamalar ve Performans İpuçları
  1. Anasayfa
  2. »
  3. Yazılım
  4. »
  5. Laravel Eloquent ORM: En İyi Uygulamalar ve Performans İpuçları

Laravel Eloquent ORM: En İyi Uygulamalar ve Performans İpuçları

Onur Evren - - 5 dk okuma süresi
0

Laravel’in güçlü Eloquent ORM’si, veritabanı işlemlerini yönetmek için mükemmel bir araç sunar. Ancak, bu gücü etkili bir şekilde kullanmak için bazı en iyi uygulamaları bilmek önemlidir. Bu makalede, Laravel uygulamalarınızın performansını artıracak ve kodunuzu daha temiz hale getirecek Eloquent ORM tekniklerini inceleyeceğiz.

1. Eager Loading ile N+1 Sorununu Çözme

Eager loading, ilişkili verileri ana sorgu ile birlikte yükleyerek N+1 sorunu olarak bilinen yaygın bir performans darboğazını önler.

// İyi uygulama
$users = User::with(['posts', 'profile'])->get();

// Kaçınılması gereken
$users = User::all();
foreach ($users as $user) {
    $user->posts;
    $user->profile;
}

Eager loading kullanmak, veritabanı sorgularının sayısını önemli ölçüde azaltır ve uygulamanızın performansını artırır.

2. Lazy Eager Loading: Gerektiğinde İlişkileri Yükleme

Bazen, verileri zaten çekmiş olabilir ve sonradan ilişkili verilere ihtiyaç duyabilirsiniz. Bu durumda, lazy eager loading kullanabilirsiniz.

$users = User::all();
$users->load('posts');

Bu yöntem, ihtiyaç duyduğunuzda ilişkili verileri yükleyerek, gereksiz veri çekme işlemlerinden kaçınmanıza yardımcı olur.

3. Koşullu İlişkiler ile Veri Filtreleme

Sadece belirli koşulları sağlayan ilişkileri yüklemek için koşullu eager loading kullanabilirsiniz.

$users = User::with(['posts' => function ($query) {
    $query->where('published', true);
}])->get();

Bu teknik, yalnızca ihtiyacınız olan verileri çekerek, gereksiz veri transferini önler ve sorgu performansını artırır.

4. İlişki Sayılarını Verimli Şekilde Sayma

İlişkili kayıtların sayısını almak için withCount() metodunu kullanmak, ayrı sorgular yapmaktan çok daha verimlidir.

$users = User::withCount('posts')->get();
foreach ($users as $user) {
    echo $user->posts_count;
}

Bu yöntem, ilişkili kayıtların sayısını ana sorguya ekler ve performansı önemli ölçüde artırır.

5. Global Scope ile Otomatik İlişki Yükleme

Sık kullanılan ilişkileri her zaman yüklemek için global scope’ları kullanabilirsiniz.

protected static function booted()
{
    static::addGlobalScope('withProfile', function (Builder $builder) {
        $builder->with('profile');
    });
}

Bu yaklaşım, kod tekrarını azaltır ve ilişkili verilerin tutarlı bir şekilde yüklenmesini sağlar.

6. Büyük Veri Setleri için Chunking ve Lazy Collection

Büyük veri setleriyle çalışırken, bellek kullanımını optimize etmek için chunking veya lazy collection kullanmak önemlidir.

User::with('posts')->chunk(100, function ($users) {
    foreach ($users as $user) {
        // İşlem yap
    }
});

//Veya

User::with('posts')->lazy()->each(function ($user) {
    // İşlem yap
});

Bu teknikler, büyük veri setleriyle çalışırken bellek tüketimini azaltır ve uygulamanızın daha verimli çalışmasını sağlar.

7. Subquery Selects ile İlişkili Veri Optimizasyonu

İlişkili verilerin bir özelliğini ana sorguya eklemek için subquery selects kullanabilirsiniz.

$users = User::addSelect(['last_post_title' => Post::select('title')
    ->whereColumn('user_id', 'users.id')
    ->latest()
    ->limit(1)
])->get();

Bu yöntem, ilişkili verilerden belirli bilgileri çekerken sorgu sayısını azaltır ve performansı artırır.

Laravel Eloquent ORM, güçlü ve esnek bir veritabanı soyutlama katmanı sunar. Bu en iyi uygulamaları kullanarak, uygulamanızın performansını önemli ölçüde artırabilir, daha temiz ve bakımı daha kolay kod yazabilirsiniz. Her zaman uygulamanızın özel ihtiyaçlarını göz önünde bulundurarak bu teknikleri kullanın ve gerektiğinde performans testleri yapın. Eloquent ORM’nin sunduğu bu güçlü özellikleri kullanarak, daha verimli ve ölçeklenebilir Laravel uygulamaları geliştirebilirsiniz.

İlgili Yazılar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir