Версия источника: 4880e8b4372c96001c2e052be28b68a95d31252b
Синхронизировано: 2026-11-09T11:15:07.649Z
Источник: https://github.com/sergey-from-riders/vibecoding-base/tree/4880e8b4372c96001c2e052be28b68a95d31252b

<a id="frameworks-laravel-eloquent"></a>

# Laravel: Eloquent и N+1

## Коротко

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

## Плохо

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

## Хорошо

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

## Почему

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

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

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

## Человек

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

## Агент

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

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

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

## Как проверить

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

## Источники

- [Eloquent: Relationships](https://laravel.com/docs/12.x/eloquent-relationships#eager-loading)
- [Database: Pagination](https://laravel.com/docs/12.x/pagination)

Уровень: Рекомендуется. Проверено: 2026-11-09. Изменено: 2026-11-09.

[Исходный файл](https://github.com/sergey-from-riders/vibecoding-base/blob/4880e8b4372c96001c2e052be28b68a95d31252b/registry/standards/frameworks/platforms/rules/laravel-eloquent.md)
