Laravel - сопоставить два отношения одному - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть модель events, где я храню информацию о событиях. Каждое событие принадлежит одному group. users группы событий имеют возможность ответить, присутствуют ли они на мероприятии или нет. Эта информация сохраняется в отдельной таблице event_replies.

Теперь с простыми отношениями я могу получить все ответы о событии:

public function replies()
{
    return $this->hasMany('App\Models\EventReply','event_id','id');
}

или я могу получить всех пользователей группы

public function users()
    {
        return $this->hasMany('App\Models\User','group_id','group_id');
    }

Но загрузка ответы не загружают всех пользователей, которые не ответили.

То, что я хочу, это: отношение должно возвращать ВСЕХ пользователей группы. Если они ответили, значение должно возвращаться, если нет: значение должно быть нулевым.

Можно ли объединить / отобразить отношение пользователей с отношением ответы?

Спасибо!

РЕДАКТИРОВАТЬ

Вот пример того, как должен выглядеть результат JSON:

    [ 
   { 
      "id":1,
      "group":1,
      "name":"Event 1",
      "replies":[ 
         { 
            "name":"user 1",
            "reply":1 // replied
         },
         { 
            "name":"user 2",
            "reply":0 // replied
         },
         { 
            "name":"user 3",
            "reply":null // NO reply in event_replies
         },
         { 
            "name":"user 4",
            "reply":1 // replied
         }
      ]
   }
]

РЕДАКТИРОВАТЬ 2

Events -Таблица:

id: int
name: String
group_id: int

Users -Таблица:

id: int
name: String
group_id: int

event_replies -Таблица:

event_id: int
user_id: int

Как я уже говорил: моя цель - провести мероприятие со всеми пользователями, входящими в группу -> user.group_id = event.group_id. Если они ответили, ответ должен быть в объекте пользователя. Если нет - объект Reply внутри объекта user должен быть нулевым.

При обычном запросе SQL я присоединяюсь ко всем пользователям и оставляю присоединиться к ответам.

Ответы [ 2 ]

2 голосов
/ 05 февраля 2020

Получение ответов с пользователем и определение отношений пользователя в модели EventReply

public function replies()
{
   return $this->hasMany('App\Models\EventReply','event_id','id')->with('user');
}

EventReply. php

public function user()
{
    return $this->hasOne(User::class);
}
1 голос
/ 05 февраля 2020

Если я правильно понимаю, вы хотите «загрузить» модель Event с вложенными users и их соответствующими replies.

. Получить одно событие:

$event = Event::find(1)->with('users.replies')->get();

Получить все события:

$events = Event::all()->with('users.replies')->get();

Вот Laravel документация о стремительной загрузке:

...