---
title: "Зупинка проблеми N+1 запитів"
url: https://laravelukraine.com/blog/zupinka-problemi-n1-zapitiv
date: 2026-03-02
---

# Зупинка проблеми N+1 запитів

Сторінка завантажує 10 постів. База даних робить 101 запит.

1 запит для постів. 100 запитів для авторів. Класична проблема N+1.

**Рішення: Eager Loading**

Використання `with()` для завантаження зв'язків наперед. Один запит стає двома.

Порада: Laravel Debugbar показує всі запити. Спочатку встановити його.

**Коли НЕ використовувати eager loading:**

- Насправді не потрібні дані зв'язків
- При роботі з одним записом (немає циклу = немає N+1)
- Зв'язок повертає величезні набори даних (може бути гірше за N+1)

**Просунутий трюк:**

Використовувати `withCount()` коли потрібна тільки кількість, а не повний зв'язок.

```php
// ПОГАНО: 101 запит
$posts = Post::all();
foreach ($posts as $post) {
    echo $post->author->name; // Запит на кожен пост
}

// ДОБРЕ: 2 запити
$posts = Post::with('author')->get();
foreach ($posts as $post) {
    echo $post->author->name; // Без додаткових запитів
}

// Завантажити декілька зв'язків
$posts = Post::with(['author', 'comments', 'tags'])->get();

// Вкладені зв'язки
$posts = Post::with('comments.author')->get();

// Потрібна тільки кількість?
$posts = Post::withCount('comments')->get();
echo $posts[0]->comments_count; // Зв'язок не завантажений
```
