Создание многомерной структуры из сгруппированных агрегатных данных из запроса Eloquent.Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Создание многомерной структуры из сгруппированных агрегатных данных из запроса Eloquent.

Сообщение Anonymous »

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

Код: Выделить всё

[
{
"age": 8,
"countAll": 3,
"gender": [
{
"genderName": "male",
"countGender": 2
},
{
"genderName": "female",
"countGender": 1
},
]
},
{
"age": 10,
"countAll": 1,
"gender": [
{
"genderName": "male",
"countMale": null (or "0")
},
{
"genderName": "female",
"countFemale": 1
},
]
},
У меня есть одна таблица в MySQL:

Код: Выделить всё

| id | name     |  gender  | age | user_id |
--------------------------------------------
| 1  | nameA    | male     | 8   |    1    |
| 2  | nameB    | female   | 10  |    1    |
| 3  | nameC    | male     | 8   |    1    |
| 4  | nameD    | female   | 8   |    1    |
Я использую laravel 10, я сделал вот такой запрос

Код: Выделить всё

$test = Participant::select('age', DB::raw('COUNT(age) as countAge'), DB::raw('COUNT(gender) as  countGender'))->where('user_id', $user_id)->groupBy('age')->orderBy('age', 'ASC')->get();

Код: Выделить всё

$output = array();
$currentAge = "";
$currentCount = "";

foreach ($test as $data) {
if ($data->age != $currentAge) {
$output[] = array();

end($output);
$currentItem = &$output[key($output)];
$currentAge = $data->age;
$currentCount = $data->countAge;
$currentItem['age'] = $currentAge;
$currentItem['countAll'] = $currentCount;
$currentItem['gender'] = array();
}
$currentItem['gender'][] = array('genderName' => $data->gender, 'countGender' => $data->countGender);
}
и результат в формате json_encoded:

Код: Выделить всё

[
{
"age": 8,
"countAll": 3,
"gender": [
{
"genderName": null,
"countGender": 3
}
]
},
{
"age": 10,
"countAll": 1,
"gender": [
{
"genderName": null,
"countGender": 1
}
]
},
Я прочитал много ссылок по созданию вложенного JSON и внес много изменений в SQL-запрос, но пока не нашел решения.
Как мне заставить этот запрос Eloquent возвращать вложенный объект JSON, подобный тому, который я описал выше?

Подробнее здесь: https://stackoverflow.com/questions/786 ... eloquent-q
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»