Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗pplrPmMREL 188 of 252 menu
◀ ▶

Ленивая и жадная загрузка в Laravel

Связанные модели в Laravel по умолчанию загружаются лениво. Это значит, что SQL-запрос к связанной таблице выполняется в момент обращения к отношению.

Пусть у нас категории связаны с постами через hasMany. Если взять все категории и в цикле обратиться к постам каждой, получится проблема N+1: один запрос на категории и ещё по одному на каждую категорию:

<?php $categories = Category::all(); foreach ($categories as $category) { foreach ($category->posts as $post) { dump($post->title); } } ?>

Для решения проблемы используют жадную (нетерпеливую) загрузку. Метод with заранее подгружает связанные данные. Имя в массиве должно совпадать с именем метода отношения:

<?php $categories = Category::with(['posts'])->get(); foreach ($categories as $category) { foreach ($category->posts as $post) { dump($post->title); } } ?>

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

Выберите несколько задач из предыдущих уроков и переделайте их код на жадную загрузку.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить