Eloquent hasManyThrough также получает информацию о средней таблице - PullRequest
0 голосов
/ 17 мая 2019

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

countries
  id - integer
  name - string 

users
  id - integer
  country_id - integer
  name - string

posts
  id - integer
  user_id - integer
  title - string

и определите отношения, аналогичные описанным в документе.

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 17 мая 2019

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

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

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

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

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

Подробнее см. В документации .

1 голос
/ 17 мая 2019

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

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