Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти
Інше
Події Про нас

Блог

Статті, новини, туторіали та переклади від учасників спільноти

No results.
Tips 02 березня 2026

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

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

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

Рішення: Eager Loading

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

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

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

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

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

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

// ПОГАНО: 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; // Зв'язок не завантажений