Kaan Tanış, Mersin’de freelance web tasarım, yazılım geliştirme ve mobil uygulama üreten full-stack geliştirici ve UI tasarımcısıdır.

Laravel Eager Loading ve N+1 Problemi

Laravel Eager Loading ve N+1 Problemi

100 kullanıcıyı listeleyip her birinin yazılarını gösteriyorsunuz. Sayfa 8 saniyede açılıyor. Sebep genelde bu: N+1.

Sorun ne

$users = User::all(); // 1 ana sorgu

foreach ($users as $user) {
    $posts = $user->posts; // N sorgu
}

1 ana sorgu + her kullanıcı için 1 sorgu. 100 kullanıcı varsa 101 sorgu. Döngü her döndüğünde veritabanına gidiliyor.

Çözüm: with()

$users = User::with('posts')->get();

Hepsi bu. Laravel ilişkili veriyi tek seferde çekiyor, sorgu sayısı 2'ye düşüyor. Sayfa açılışı saniyelerden milisaniyelere iniyor.

İki ek numara

Veriyi sonradan yüklemek isterseniz:

$users->load('posts');

İlişkiyi filtreleyerek çekmek isterseniz:

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

Livewire ile çalışırken bu daha da kritik, çünkü her etkileşimde sorgular tekrar koşuyor. Component render olmadan önce with() ile yükleyin, arayüz akıcı kalsın.

İlgili Yazılar

Yorum Yap

Yorumunuz onaylandıktan sonra yayınlanacaktır. Bildirim almak isterseniz e-posta adresinizi girebilirsiniz.