Laravel добавить переменную для вложенных коллекций - PullRequest
0 голосов
/ 17 февраля 2020

Я хочу добавить переменную для каждого объекта коллекции внутри коллекции. Здесь JSON ответ, подобный этому:

         {
         "id": 16,
          "survey_id": "8",
          "title": "How are you?",
          "created_at": "2020-02-06 04:21:44",
          "updated_at": "2020-02-06 04:21:44",
              "answers": [

Здесь я хочу добавить переменную к каждому ответу

{
            "id": 52,
            "question_id": "16",
            "text": "VERY GOOD",
            "created_at": "2020-02-06 04:21:44",
            "updated_at": "2020-02-06 04:21:44",
            "reports_count": "4",
            "responded": 2
        },
        {
            "id": 53,
            "question_id": "16",
            "text": "OK",
            "created_at": "2020-02-06 04:21:44",
            "updated_at": "2020-02-06 04:21:44",
            "reports_count": "4",
            "responded": 2
        },
        {
            "id": 54,
            "question_id": "16",
            "text": "BAD",
            "created_at": "2020-02-06 04:21:44",
            "updated_at": "2020-02-06 04:21:44",
            "reports_count": "2",
            "responded": 2
        }
    ]
},

В целом, я хочу добавить для каждого ответа переменную, такую ​​как $respond = $answer->reports()->count(); Справка Пожалуйста !!

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

Я бы получил ответы из базы данных, прежде чем присвоить этот массив новому вопросу-объекту-свойству.

public function get() {
  // fetch parent question
  $question = Question::where('title', $title)->get();

  // fetch answers
  $answers = Answers::where('parent_id', $question->id)->get();

  // create property called "answers"
  $question->answers = $answers;

  return response()->json($question);
}
0 голосов
/ 17 февраля 2020

Вы можете сделать что-то подобное, если вы хотите рассчитать это в коллекции напрямую.

$yourCollection->transform(function($collectionItem) {
  $collectionItem['responded'] = $collectionItem->answers->count();
  return $collectionItem;
});

Но вы можете сделать это и на стороне sql. Я думаю, что так должно быть и лучше;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...