Как вывести два объекта на один уровень в выводе laravel json?

#json #laravel #api #formatting #parameter-passing

#json #laravel #API #форматирование #передача параметров

Вопрос:

У меня есть две модели с именами Student и Roll. Я хочу, чтобы их данные оставались на одном уровне. Часть контроллера..

    $stuents=Student::all();
   $count=$stuents->count();
   $rolls=Roll::all();
   $response=[];
   for($i=0;$i<$count;$i  ){
        $response[$i]=[
        'students'=>$stuents[$i],
        'roll_number'=>$rolls[$i]
        ];
   }
   return response($response);
  

Вывод приведенного выше ответа..

 [
{
    "students": {
        "name": "habib",
        "dept": "ece"
    },
    "roll": 1609047
},
{
    "students": {
        "name": "hafiz",
        "dept": "ece"
    },
    "roll": 1609061
}  

]
  

Но мой ожидаемый результат будет..

 [
{
    "students": {
        "name": "habib",
        "dept": "ece",
        "roll": 1609047
    }
},
{
    "students": {
        "name": "hafiz",
        "dept": "ece",
        "roll": 1609061
    }
}
]
  

Как я могу решить эту проблему?

Ответ №1:

Вам нужно будет добавить роль для каждого учащегося, которую вы добавляете в массив ответов.

Если объекты в $students :

 for ($i = 0; $i < $count; $i  ) {
    // if object
    $students[$i]->roll = $rolls[$i];

    $response[] = [
        'student' => $students[$i],
    ];
}
  

Если массивы в $students :

 for ($i = 0; $i < $count; $i  ) {
    $response[] = [
        'student' => ['roll' => $rolls[$i]]   $students[$i],
    ];
}