Использование knex.raw для конкатенации в конкатенации для таблицы MySQL - PullRequest
0 голосов
/ 19 сентября 2018

Понятия не имею, способен ли Knex вообще поддерживать такую ​​функцию.Я предполагаю, что ошибка ER_INVALID_GROUP_FUNC_USE, которую я получаю, означает, что синтаксис (все запятые, кавычки и т. Д.) Правильный, но наличие одной функции concat внутри другой не поддерживается.Есть ли правильный подход к генерации такого типа возвращаемого объекта?

knex('a').select('a.*',knex.raw(
                `CONCAT("{", GROUP_CONCAT(DISTINCT '"',b.b_id,'"',':','[',
                '"',b.b_text,'"',",",
                CONCAT("{", GROUP_CONCAT(DISTINCT
                '"',c.c_id,'"',':','"',c.c_text,'"'),"}"),
                "]"),"}")`
            ))

РЕДАКТИРОВАТЬ: просто для ясности вот как я хотел бы, чтобы возвращаемый объект выглядел для простого анализа JSON:

object = [{
    a_id:'id',
    a_text:'text',
    b_list:{
        b_id:[
            b_text,
            {c_id:c_text}
        ]
    }
}]

Разве проще получить возвращенную таблицу A, а затем .then () =>, чтобы получить список b_list (хотя я бы предпочел, чтобы это был объект {}, а не массив []) и объединить с ним Cs??Я на самом деле довольно новичок в программировании sql, поэтому не очень понимаю компромиссы между одним подходом и другим - является ли плохая идея сделать несколько обращений к БД в последующих функциях .then () => ... в некоторых случаях этокажется неизбежным?

...