#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)-> получить();