Search code examples
symfonyvue.jsgraphqlapollo

GraphQL Syntax for mapping array on mutation field


I'm looking for advice on syntax. In my query, I need my backend (Graphlite, Symfony) to get the child items. The way I get the regular item is as below, and works correctly. I'm not well versed enough in GraphQL / Apollo / VueJS / GraphQLite to know which technology owns the "{id: $itemId}" syntax, nor do I know what it is called, so I can't find any info about it.

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

So, given that the {id: $itemId} correctly works for getting an item, I assume there is some graphQL syntax that would work to apply the childItemIds to get the childItems. Is there a name for this type of mapping? What would the syntax be?


Solution

  • As per discussion with @UjinT34, since this couldn't be done inline with GraphQL, I created an array of ItemInput before calling the mutation:

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

    The original query then became:

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

    Once I understood that the {id: $item} wasn't a magic GQL/GraphQLite syntax and was simply an inline javascript object being created, the solution became fairly simple.