Жадная и ленивая загрузка в Laravel. Методы with() и load().

Ромчик
0

laravelДоброго времени суток. В данной статье мы разберемся с двумя подходами получения данных из связанных моделей: with() и load(). И рассмотрим разницу между ними. Что такое отношения и как связать модели, какие существуют отношения в Laravel вы можете прочитать в официальной документации.

И так приступим. Что такое ленивая и жадная загрузка и какую проблему позволяет решить очень хорошо описано тут.

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

  • with()
  • load()

Оба метода выполняют одну и туже роль – загружают связанные данные. И фактически выполняют два одинаковых запроса. Но разница есть.

Жадная загрузка метод with()

Метод with загружает связанную модель сразу после выполнения первоначального запроса (all(), get() и др.). Например:


$users = User::with('comments')->get();

Фактически будет выполнено два запроса:


select * from `users`

select * from `comments` where `comments`.`user_id` in (1, 2, 3, 4, 5)

Ленивая загрузка метод load()

Метод load позволяет сначала получить результат первоначального запроса, а затем загрузить данные связанной модели.


$users = User::all();

Будет выполнен запрос:


select * from `users`

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


$users = $users->load('comments');

И будет выполнен следующий запрос:


select * from `comments` where `comments`.`user_id` in (1, 2, 3, 4, 5)

Это дает нам возможность задавать условия, когда загружать данные из связанной модели.

Заключение.

Мы с вами рассмотрели два метода with() и load() загрузки данных из связанных моделей в Laravel. Когда использовать метод with(), а когда использовать метод load()? Все просто, если нам нужны сразу данные из связанной модели, то используем with(). Если же данные из связанной модели нужны при выполнении какого-то условия, то используем load().

 

Понравилась статья? Поделись с друзьями.
  • Add to favorites
  • Добавить ВКонтакте заметку об этой странице
  • Twitter
  • Facebook
  • Мой Мир
  • LiveJournal
  • Одноклассники
  • Блог Я.ру
  • MySpace
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • Reddit
  • StumbleUpon
  • Technorati
  • del.icio.us
  • БобрДобр
  • LinkedIn
  • Memori.ru
  • Сто закладок
  • Blogger
©2012-2017 По всем вопросам обращайтесь через форму обратной связи

Яндекс.Метрика