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

Жадная загрузка множественных отношений

Пусть у нас есть таблица с комментами, в который каждый коммент связан со своим постом и со своим юзером:

comments
        id
        text
        post_id
        user_id

Пропишем эту связь:

app/Models/Comment.php<?php
class Comment extends Model
{
    public function post()
    {
        return $this->belongsTo(Post::class);
    }
    
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

Давайте получим все комменты:

app/Http/Controllers/CommentController.php<?php
class CommentController extends Controller
{
    public function show()
    {
        $comments = Comment::all();
        dump($comments);
    }
}

Переберем комменты циклом и в цикле для каждого коммента будем получать его пост и его юзера:

app/Http/Controllers/CommentController.php<?php
class CommentController extends Controller
{
    public function show()
    {
        $comments = Comment::all();
        
        foreach ($comments as $comment) {
            dump($comment);
            dump($comment->post);
            dump($comment->user);
        }
    }
}

В этом случае в каждой итерации цикла будут выполнятся лишние SQL запросы. Давайте исправим проблему, заранее загрузив данные двух связанных моделей:

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