Мастерство оптимизации производительности Laravel
Вам нужны быстрые веб-приложения. Медленные приложения раздражают пользователей и вредят вашему бизнесу. Проблема «N+1 запроса» может замедлить ваши приложения на Laravel. Но у Laravel есть решение: жадная загрузка (eager loading).
Эта техника поможет вам освоить метод with(). Вы узнаете, как поддерживать скорость и эффективность ваших приложений.
Давайте рассмотрим пример. У вас есть платформа для блогов. Каждый пост принадлежит автору. Вы хотите вывести список постов, указав автора для каждого из них.
Распространенный подход — сначала получить все посты, а затем по очереди получать автора каждого поста. Это приводит к большому количеству запросов к базе данных.
Если у вас 100 постов, этот код выполнит 101 запрос к базе данных. Это и есть «проблема N+1 запроса». Она создает избыточную нагрузку и замедляет ваше приложение.
Метод with() решает эту проблему. Он загружает все связанные модели за один или два запроса.
Вы можете использовать его следующим образом:
$posts = App\Models\Post::with('author')->get();
Этот код получает все посты и их авторов всего за два запроса.
Вы также можете загружать несколько связей:
$posts = App\Models\Post::with(['author', 'category'])->get();
Или загружать вложенные связи:
$posts = App\Models\Post::with('author.profile')->get();
Жадная загрузка (eager loading) — это ключ к созданию быстрых приложений на Laravel. Она устраняет проблему N+1 запроса и сокращает количество запросов к базе данных.
Используйте метод with(), чтобы повысить производительность вашего приложения.
Источник: https://dev.to/prabashanadev/mastering-laravel-performance-a-deep-dive-into-eager-loading-22l0