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

Метод loadMissing

Метод loadMissing применяется к экземпляру модели или коллекции моделей Eloquent и позволяет загрузить указанные отношения, но только если они ещё не были загружены. Это помогает избежать лишних запросов к базе данных и оптимизирует производительность приложения. Первым параметром передаётся имя отношения или массив отношений для загрузки, вторым - колбэк для дополнительных условий загрузки отношения.

Синтаксис

<?php $model->loadMissing($relations); ?>

Пример

Давайте получим модель статьи и загрузим отношение 'author' с помощью loadMissing:

<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function index() { $article = Article::find(1); $article->loadMissing('author'); echo $article->author->name; } } ?>

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

"John Doe"

При этом, если отношение уже было загружено ранее, повторный запрос к базе данных не выполняется.

Пример

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

<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function index() { $article = Article::find(1); $article->loadMissing(['author', 'comments', 'category']); $res = [ 'author' => $article->author->name, 'comments' => $article->comments->count(), 'category' => $article->category->name ]; print_r($res); } } ?>

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

Array ( [author] => "John Doe" [comments] => 5 [category] => "Technology" )

Пример

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

<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function index() { $article = Article::find(1); $article->loadMissing('author.profile.socialNetworks'); $res = [ 'author' => $article->author->name, 'socialNetworks' => $article->author->profile->socialNetworks ]; print_r($res); } } ?>

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

Array ( [author] => "John Doe" [socialNetworks] => ["Twitter", "LinkedIn"] )

Пример

Давайте применим loadMissing к коллекции моделей и добавим дополнительное условие для загрузки:

<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function index() { $articles = Article::where('status', 'published')->get(); $articles->loadMissing([ 'comments' => function ($query) { $query->where('is_approved', true); } ]); foreach ($articles as $article) { echo $article->title . " - " . $article->comments->count() . " comments\n"; } } } ?>

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

"article 1 - 3 comments" "article 2 - 1 comments" "article 3 - 0 comments"

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

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