Запросы N+1 — это как тараканы: если их не замечать, они размножаются, и к концу дня твой сервер стонет. В Laravel это особенно больно ощущается на больших данных. Ты гоняешь foreach по коллекции, а каждый элемент делает отдельный запрос к базе. Похоже на лотерею: успеет ли страница загрузиться, пока база не выдыхает.

Есть несколько инструментов, которые реально помогают это заметить и исправить.

Laravel Debugbar

Если хочешь реально видеть, что происходит, ставь Debugbar. Это как шлем ночного видения для твоего приложения: показывается каждый SQL-запрос, и видно, где N+1 прячется.

composer require barryvdh/laravel-debugbar --dev

После установки Debugbar сам встраивается в приложение. Внизу страницы ты увидишь сколько запросов делается, какие медленные и где N+1. И да, это реально экономит нервы.

Eloquent и отношения

Laravel ORM умеет работать с отношениями нормально, если знаешь пару приёмов:

Eager Loading — грузишь связанные данные сразу, а не по одному элементу:

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

Lazy Eager Loading — если модель уже получена, но нужно подтянуть связи:

$user = User::find(1);
$user->load('posts');

Если не использовать это, твои foreach превратятся в бесконечный цикл запросов и база будет материться на каждом шагу.

Laravel Scout

Scout — это полнотекстовый поиск, но не для красоты. Если у тебя много данных и ты хочешь искать без перегрузки базы, он уменьшает количество запросов, индексируя модели.

composer require laravel/scout

Настраиваешь индексы и ищешь через Scout API. Всё просто, но реально спасает от N+1, когда данные большие и запросов десятки тысяч.

Laravel Telescope

Telescope — это твой супер-контроль. Показывает каждый запрос, каждый SQL, события, исключения. Если Debugbar — ночное видение, то Telescope — дрон с тепловизором.

composer require laravel/telescope

Ставишь, смотришь панель и видишь N+1 как на ладони. Когда база задыхается — сразу понятно кто виноват.

В итоге

  • Если ты игнорируешь N+1, готовься к проде, где страницы летят в бесконечный спиннер.
  • Debugbar и Telescope не для красоты — это твои глаза и уши.
  • Eager Loading и Scout — твои руки. Ловишь N+1 до того, как сервер упадёт.

В общем, N+1 — не мистическая проблема. Это конкретный баг, который виден, если правильно смотреть. Ловишь его, исправляешь — и твой Laravel снова не тормозит на каждой коллекции.