GraphQL - динамически добавлять поля к результатам - PullRequest
1 голос
/ 16 февраля 2020

Со следующей схемой GraphQL:

input Filter{
    col: String!
    values: [String!]!
}

type DynamicData{
    id: String!
    name: String!
}

type Query{
    dynamicQuery(
        filter: [Filter!]
    ): [DynamicData]
}
schema{
    query: Query
}

И следующими данными (много дополнительных столбцов):

+---+-------+--------+------+
|id |name   |col1    |col2  | .... n columns
+---+-------+--------+------+
|1  |user_1 |group_a |cls_1 |
|2  |user_2 |group_b |cls_2 |
|3  |user_3 |group_c |cls_2 |
+---+-------+--------+------+

Я запрашиваю данные следующим образом:

dynamicQuery(filter:[{col:"col1", values:["group_b", "group_c"]}]){
    id
    name
}

, передавая резольверу имя столбца и значений , по которым я хотел бы отфильтровать результаты.

Я получаю ожидаемые результаты IE:

+---+-------+--------+------+
|id |name   |col1    |col2  | .... n columns
+---+-------+--------+------+
|1  |user_1 |group_a |cls_1 | X Filtered out row
|2  |user_2 |group_b |cls_2 | <------ col1 == group_b
|3  |user_3 |group_c |cls_2 | <------ col1 == group_c
+---+-------+--------+------+

JSON:

[{"id":2 , name: "user_2"},{"id":3 , name: "user_3"}]

Вопрос : есть ли способ динамически добавьте имя фильтра к результатам, не включая все столбцы типа DynamicData, чтобы результаты выглядели так, как показано ниже?

[{"id":2 , name: "user_2", col1: "group_b"},{"id":3 , name: "user_3", col1: "group_c"}]

Обновить Из того, что я прочитал, кажется, что невозможно динамически добавить поле к результату, если вы не используете пользовательских скаляров , таких как JSON.

Обновленный вопрос: Как написать схему, которая может быть достаточно гибкой, чтобы возвращать столбцы, запрошенные в аргументах в теле результатов?

...