Удобочитаемый способ вставить коллекцию hasMany в результирующий объект в контроллере - PullRequest
0 голосов
/ 19 мая 2019

Внутри контроллера ресурсов у меня есть следующая функция показа.

public function show(Invite $invite)
{
    return response($invite->jsonSerialize(), Response::HTTP_CREATED);
}

У модели приглашения много гостей, а модель гостя принадлежит приглашению.Стандартные маршруты ресурсов.Когда я запрашиваю URL, я получаю ответ вроде:

{
    id":17,
    "user_id":2,
    "event_id":1,
    "name":"Fred Neumann +1",
    "called":0,
    "emailed":0,
    "invited":1,
    "max_guests":2,
    "created_at":"2019-05-18 21:31:07",
    "updated_at":"2019-05-18 21:31:07",
    "deleted_at":null
}

Теперь я также хотел бы вернуть гостей вместе с информацией о приглашении.Я могу добиться этого, изменив функцию show следующим образом:

public function show(Invite $invite)
{
    // Don't remove this line:
    $invite->guests = $invite->guests;

    return response($invite->jsonSerialize(), Response::HTTP_CREATED);
}

Это прекрасно работает, но не очевидно, что оно действительно что-то делает.Я мог легко видеть себя, удаляющим это позже случайно и ломающим API, следовательно комментарий.Есть ли более читабельная альтернатива?

1 Ответ

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

Загрузка отношения guests с отложенной загрузкой :

public function show(Invite $invite)
{
    return response($invite->load('guests')->jsonSerialize(), Response::HTTP_CREATED);
}
...