Laravel получает доступ к модели отношения HasMany, принадлежащей к модели

В основном у меня три модели: свадьба, приглашения и пользователи. Weddings имеет приглашения и приглашает пользователей (имея в виду, что пользователь может принадлежать к нескольким приглашениям). Я хочу получить доступ к $wedding->users напрямую.

Wedding.php

class Wedding extends Model
{

  public function invites()
  {
     return $this->hasMany(Invite::class);
  }
...

Invites.php

class Invite extends Model
{

  public function user()
  {
     return $this->belongsTo(User::class);
  }
...

Таблицы:

Wedding
- id
- name

Invite
- invite_date
- wedding_id
- user_id

User
- id
- name
- email

И я хочу получить доступ к пользователям напрямую, используя $wedding->users Каковы отношения между Wedding и пользователями?

Имеет много через, все это в документации.
Kyslik 23.07.2018 13:56

@Kyslik это не HasManyThrough, потому что User не содержит invive_id

Ayusf 23.07.2018 14:02

Вы можете изменить первичный / внешний ключи, просто увидев подпись определения hasManyThrough, belongsToMany также является действительный, в то время как он использует сводную таблицу invites, как упомянул Джонас. Разница просто семантическая, вы читаете это как «свадьба имеет много пользователей через приглашения» вместо «свадьба принадлежит пользователям».

Kyslik 23.07.2018 14:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
137
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Добавьте этот метод в свой класс Widding

public function users()
{
    return $this->hasManyThrough('App\User', 'App\Invite');
}

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

Это не потому, что столбец пользователя не содержит invive_id

Ayusf 23.07.2018 14:12
Ответ принят как подходящий

Это отношение BelongsToMany:

public function users() {
    return $this->belongsToMany(User::class, 'invites');
}

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