Eloquent hasManyThrough также получает информацию о средней таблице

У меня такая же структура таблицы, как указано в документе laravel для отношения HasManyThrough hasManyThrough

countries
  id - integer
  name - string 

users
  id - integer
  country_id - integer
  name - string

posts
  id - integer
  user_id - integer
  title - string

и определите отношение так же, как в doc.

public function posts()
{
    return $this->hasManyThrough(
        'App\Post', 'App\User',
        'country_id', 'user_id', 'id'
    );
}

Теперь, когда я перечисляю сообщения конкретной страны. Мне тоже нужна информация о пользователе поста. Я имею в виду информацию из сводной таблицы (пользователи)

$posts = Country::find(2)->posts();

Вышеприведенное возвращает только данные поста.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
0
910
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Что вам нужно, так это загрузить пользователей вместе с сообщениями, это можно сделать с помощью метода with() в Builder:

$posts = Country::find(2)->posts()->with('user')->get();

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

$posts = Country::find(2)->posts()->with('user:id,name')->get();

Затем вы можете просто использовать $post->user->name или что-то еще, что вам нужно, при повторении вашей коллекции.

Обратитесь к документация для получения дополнительной информации.

для быстрой загрузки сначала мне нужно определить отношения между публикацией и правом пользователя ...? Или это будет работать с моими текущими отношениями hasManyThrough?

Ruchita Sheth 17.05.2019 09:13

Вам придется определить отношения в модели Post, но я бы сказал, что это стоит затраченных усилий. Вам могут понадобиться отношения и позже, они не устареют, так как они все равно существуют. :)

D. Petrov 17.05.2019 09:15

Спасибо ... Это работает ... Я просто придерживался отношения hasManyThrough, чтобы найти выход. и не думать о других отношениях, чтобы сфотографировать ..

Ruchita Sheth 17.05.2019 09:27

нужна еще одна помощь. это дает мне ошибку. Country::find(2)->posts()->with('user:id,name')->get(); вместо id имя моего столбца id_user

Ruchita Sheth 17.05.2019 09:37

Ну, это был только пример, конечно, вы должны заменить id на user_id, если это соответствует названию вашего столбца.

D. Petrov 17.05.2019 09:38

Попробуй это:

$posts = Country::find(2)->posts()->with('user')->get();

Другие вопросы по теме