РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
191 of 1392 menu

Метод load

Метод load применяется к уже полученной коллекции или модели Eloquent и позволяет загрузить связанные отношения, которые не были подгружены при выполнении основного запроса. В отличие от метода with, который загружает отношения на этапе построения запроса, метод load работает с уже существующими объектами. Первым параметром передаётся имя отношения, которое нужно загрузить, вторым - опциональная функция для дополнительной настройки запроса отношения.

Синтаксис

<?php Model::load($relations); ?>

Пример

Давайте сначала получим статьи без загрузки связанных данных, а затем подгрузим автора для каждой статьи:

<?php namespace App\Http\Controllers; use App\Models\Article; class ArticleController extends Controller { public function index() { $articles = Article::all(); $articles->load('author'); foreach ($articles as $article) { echo $article->title . ' - ' . $article->author->name; } } } ?>

Результат выполнения кода:

"article 1 - John Doe" "article 2 - Jane Smith" "article 3 - John Doe"

Пример

Давайте подгрузим несколько отношений одновременно, передав массив с именами отношений:

<?php namespace App\Http\Controllers; use App\Models\Post; class PostController extends Controller { public function show() { $posts = Post::where('status', 'published')->get(); $posts->load(['author', 'comments', 'category']); foreach ($posts as $post) { echo $post->title; echo ' - ' . $post->author->name; echo ' - ' . $post->comments->count() . ' comments'; } } } ?>

Результат выполнения кода:

"Post 1 - John Doe - 5 comments" "Post 2 - Jane Smith - 3 comments" "Post 3 - John Doe - 8 comments"

Пример

Давайте загрузим вложенное отношение с использованием точечной нотации:

<?php namespace App\Http\Controllers; use App\Models\User; class UserController extends Controller { public function index() { $users = User::limit(5)->get(); $users->load('posts.comments'); foreach ($users as $user) { echo $user->name . ' has ' . $user->posts->count() . ' posts'; foreach ($user->posts as $post) { echo ' - ' . $post->title . ' has ' . $post->comments->count() . ' comments'; } } } } ?>

Результат выполнения кода:

"John Doe has 3 posts - Post 1 has 5 comments - Post 2 has 3 comments - Post 3 has 8 comments" "Jane Smith has 2 posts - Post 4 has 2 comments - Post 5 has 4 comments" "Mike Johnson has 4 posts - Post 6 has 1 comment - Post 7 has 6 comments - Post 8 has 3 comments - Post 9 has 2 comments"

Пример

Давайте загрузим отношение с дополнительными условиями с использованием второго параметра:

<?php namespace App\Http\Controllers; use App\Models\Article; class CommentController extends Controller { public function show() { $articles = Article::where('status', 'published')->get(); $articles->load(['comments' => function ($query) { $query->where('is_active', true) ->orderBy('created_at', 'desc') ->limit(3); }]); foreach ($articles as $article) { echo $article->title . ' - recent comments: ' . $article->comments->count(); } } } ?>

Результат выполнения кода:

"article 1 - recent comments: 3" "article 2 - recent comments: 3" "article 3 - recent comments: 3"

Смотрите также

  • метод with,
    который загружает отношения на этапе построения запроса
  • метод loadMissing,
    который загружает только отсутствующие отношения
  • метод get,
    который выполняет запрос и возвращает коллекцию моделей
  • метод withCount,
    который добавляет количество связанных моделей к результату
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить