Полный цикл в digital

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

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

Пусть у нас таблица с категориями связана с таблицей с постами отношением hasMany. Давайте для нашей категории переберем циклом коллекцию ее постов. В результате SQL запрос будет отправляться каждую итерацию цикла:

app/Http/Controllers/CategoryController.php<?php
class CategoryController extends Controller
{
    public function show()
    {
        $category = Category::find(1);
        
        foreach ($category->posts as $post) {
            dump($post); // тут каждый раз шлется запрос
        }
    }
}

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

app/Http/Controllers/CategoryController.php<?php
class CategoryController extends Controller
{
    public function show()
    {
        $category = Category::with(['post'])->first();
    }
}

Теперь при переборе циклом лишних запросов не будет:

app/Http/Controllers/CategoryController.php<?php
class CategoryController extends Controller
{
    public function show()
    {
        $category = Category::with(['post'])->first();
        
        foreach ($category->posts as $post) {
            dump($post);
        }
    }
}
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг