РекомендуетсяLaravelPHP

Laravel: Eloquent и N+1

Загружайте нужные связи списком и ограничивайте размер выдачи.

Проверено Изменено

Плохо

foreach (Order::all() as $order) {
  echo $order->customer->name;
}

Хорошо

$orders = Order::with('customer')->paginate(30);
foreach ($orders as $order) {
  echo e($order->customer->name);
}

Почему это важно

Ленивая загрузка связи внутри цикла может добавлять запрос на каждую запись.

Когда применять

Laravel 12.x; связь customer объявлена и обязательна. Фильтр доступа к заказам добавляется до paginate. Не загружайте все связи без необходимости.

Кто что делает

Человек

Выбирает нужные колонки и размер страницы.

AI-агент

Добавляет eager loading, измеряет SQL-запросы на нескольких размерах выборки.

Пример применения

Экран менеджера показывает 30 заказов и имена клиентов. Основная выборка и выборка клиентов выполняются отдельно, без 30 дополнительных запросов.

Как проверить у себя

  • Количество SQL-запросов не растёт линейно с количеством строк.
  • Пагинация и фильтр доступа проверены.
ПервоисточникиИстория изменений на GitHub

Дата проверки отражает содержательную сверку. Синхронизация сайта не обновляет её автоматически.