Laravel многоуровневый выпуск - PullRequest
0 голосов
/ 01 ноября 2018

Я хочу сделать JSON ответ следующим образом:

{
  "title": "Category title",
  "description": "Category description",
  "articles": [
    {
      "title": "Article title",
      "comments": [
        {
          "user_name": "User Name",
          "text": "Coment text"
        },
        {
          "user_name": "User Name",
          "text": "Coment text"
        }  
      ]
    }
  ]
}

Приложение имеет таблицу категорий

categories
   id
   title
   description

А также таблица category_articles

category_articles
   id
   category_id
   article_id

Категория модели имеет такое отношение

public function articles()
{
   return $this->hasMany('App\CategoryArticles', 'category_id');
}

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

Вот таблица статей

articles
  id
  title
  body

Статьи имеют много комментариев отношения

comments
   id
   user_id

А также комментарий имеет отношение к пользователю

Итак, мне нужно вернуть ответ, как я показал в начале. У меня стек, как здесь, в контроллере.

 public function show(Category $category) 
 {

 }

Как мне реализовать свой код, чтобы получить такой ответ? Должен ли я использовать ресурс для этого?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Отношение hasMany используется в такой ситуации:
У пользователя много автомобилей (но автомобили уникальны только для одного пользователя)
Имеет 2 модели и 2 таблицы (1 содержит все данные, например, автомобили, а также ссылку на пользователя, т.е. user_id)

В вашем случае это были бы отношения относятся к многим
У пользователя много офисов (но с этим офисом связано больше пользователей / поклонников / источников света и т. Д.)
Имеет 3 таблицы (пользователи, офисы, сводную таблицу user_office (с user_id и office_id)

0 голосов
/ 01 ноября 2018

articles должно быть BelongsToMany отношением:

public function articles()
{
   return $this->belongsToMany('App\Article', 'category_articles');
}

Тогда используйте готовую загрузку:

$categories = Category::with('articles.comments')->get();
...