Синтаксис GraphQL для отображения массива в поле мутации - PullRequest
1 голос
/ 01 августа 2020

Ищу совета по синтаксису. В моем запросе мне нужен бэкэнд (Graphlite, Symfony), чтобы получить дочерние элементы. Я получаю обычный предмет, как показано ниже, и работает правильно. Я недостаточно хорошо разбираюсь в GraphQL / Apollo / VueJS / GraphQLite, чтобы знать, какой технологии принадлежит синтаксис "{id: $ itemId}", и я не знаю, как он называется, поэтому не могу найти никакой информации об этом.

insertItem: gql` mutation insertItem(
    $itemId: Uuid!,
    $childItemIds: [Uuid!]!
) {
    insertItem(
        item: {id: $itemId},
        childItems:  { id: { in : { $childItemIds} }
    ){
       // ... stuff
    }
}`

Итак, учитывая, что {id: $ itemId} правильно работает для получения элемента, я предполагаю, что существует некоторый синтаксис graphQL, который сработает для применения childItemIds для получения дочерних элементов. Есть ли название для этого типа сопоставления? Каким будет синтаксис?

1 Ответ

0 голосов
/ 03 августа 2020

Согласно обсуждению с @ UjinT34, поскольку это невозможно сделать встроенным в GraphQL, я создал массив ItemInput перед вызовом мутации:

          for (var i = 0, len = item.childItems.length; i < len; i++) {
            childItems.push({ id : item.childItems[i].id } )
          }

Исходный запрос затем стал:

insertItem:`` gql` mutation insertItem(

    $itemId: Uuid!,
    $childItemIds: [ItemInput!]!
) {
    insertItem(
        item: {id: $itemId},
        childItems:  $childItemIds
    ){
       // ... stuff
    }
}

Как только я понял, что {id: $item} не был синтаксисом magi c GQL / GraphQLite, а был просто создаваемым встроенным javascript объектом, решение стало довольно простым.

...