Как извлекать многотабличные записи с ускоренной загрузкой Laravel5.2

#laravel-5 #eloquent #eager-loading

#laravel-5 #красноречивый #быстрая загрузка

Вопрос:

У меня есть три таблицы (пользователи, записи и избранное). Как мне получить все записи с помощью laravel eloquent вместе с избранными сообщениями и именем человека, который пометил его как избранное.

Идентификатор пользователя, имя, электронная почта

Идентификатор записей

Избранное идентификатор user_id post_id

Это то, что я пытаюсь сделать в контроллере, но не могу повторить это в view.

$posts = Post::with(‘избранное’, ‘пользователи’)->take(10)-> get();

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

Ответ №1:

В вашем файле просмотра попробуйте

 @forech($posts as $post)

    @foreach($post->favourites as $favourite)

           //do your staff here like

           {{ $favourite->users->name }}
    @endforeach
@endforech
  

Комментарии:

1. Спасибо за ваш ответ, но вы не думаете, что это приведет к N 1 проблеме?

2. Хорошо, тогда вы можете загружать пользователей с помощью избранных, подобных этому «favorite.users» в вашем сообщении ::with («favorite.users», «otherRelations»)

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

4. Посетите laravel.com/docs/5.3 / … это поможет вам понять ограничения на быструю загрузку. В вашем случае попробуйте Post::with([‘избранное’=> функция($ query){ вернуть $query->with([‘пользователи’=> функция($q){ вернуть $ q-> где (условия указаны здесь или вы можете использовать несколько where())}]) },’пользователи’])-> взять(10)-> получить();