Laravel Perf 29 mars 2026

Éliminer les N+1 queries en Laravel : le guide définitif

Eager loading, query scopes, DB::listen — les réflexes qui font passer une app de 3s à 200ms.

Éliminer les N+1 queries en Laravel

Le problème N+1 est l'un des pièges de performance les plus courants avec Eloquent. Voici comment le détecter et l'éliminer.

Le problème

Quand vous faites Post::all() puis accédez à $post->author->name dans une boucle, Laravel exécute une requête par itération. Sur 100 articles, ça fait 101 requêtes.

La solution : Eager Loading

Post::with(['author', 'tags'])->get();

Une seule requête pour les posts, une pour les auteurs, une pour les tags. 3 au lieu de 101.

DB::listen pour détecter

DB::listen(function ($query) {
    if ($query->time > 100) {
        Log::warning('Slow query', ['sql' => $query->sql]);
    }
});

Conclusion

Toujours eager load vos relations. Utilisez preventLazyLoading() en dev pour détecter automatiquement.