Возврат функции повторяет ту же запись - PullRequest
0 голосов
/ 25 сентября 2019

Из внешнего интерфейса я отправлю этот JSON в бэкэнд:

{
    "tech": ["html"],
    "city": "zurich"
}

Вот как я получаю данные динамически из моей базы данных:

public function user($uid, $selection, $tables) {
    // 1. Query builder
    $queryBuilder = $this->createQueryBuilder('u')->select($selection)->where('u.uid = :uid');

    // 2. Get each table
    foreach ($tables as $key => $value) {
        $queryBuilder = $queryBuilder->innerJoin('App\Entity\\' . $value, $key)->andWhere("$key.uid = :uid");
    }

    // 3. Finish and return the query
    return $queryBuilder
        ->setParameter('uid', $uid)
        ->getQuery()
        ->getResult()
    ;
}

Если я включу возврат этогометод в JSON, это будет результат:

{
    "88": {
        "data": [
            {
                "tech": "PHP",
                "city": "Zurich"
            },
            {
                "tech": "JavaScript",
                "city": "Zurich"
            },
            {
                "tech": "HTML",
                "city": "Zurich"
            }
        ],
        "rank": 200
    },
    "33": {
        "data": [
            {
                "tech": "HTML",
                "city": "zurich"
            }
        ],
        "rank": 200
    }
}

Таким образом, у нас есть информация о 2 пользователях (88 и 33).Массив data с идентификатором 33 выглядит хорошо, и так оно и должно быть.Но массив data с идентификатором 88 выглядит испорченным.Вот как это должно выглядеть:

  "data": [
            {
                "tech": ["PHP", "JavaScript", "HTML"],
                "city": "Zurich"
            }
        ]

Как мне это сделать?

1 Ответ

0 голосов
/ 25 сентября 2019

вы должны использовать агрегатную группу функций по городам, например:

select group_concat(tech), city from tbl1
group by city
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...