rdrgtec
rdrgtec

Reputation: 640

How can I insert records in AwsAppSync mutation with proper @connection values?

I have added a resources table to my schema, connecting to a Plants table:

type Resource @model
{
    id: ID!
    name: String!
    Plants: [Plant] @connection(name: "ResourcePlant")
}

Ran amplify push, and all resources were created properly.

Now I wanted to add a Resource, and link it to all Plants properly.

Do you know how is the sintaxe I should use to run the recently created mutation createResource in order to add the items on Plant I want to include to that resource?

I tried to run like this:

mutation CreateResource {
  createResource (input: {
        name: "Plant",
        Plants : {
            items :  
            { id: "f9a0468e-da74-41d5-8287-1cb6a76b25a5" }
    }
  }
  ) {
    name,
    Plants {
      items {
        id
      }
      nextToken
    }
  } 
}

This was the error message:

Validation error of type WrongType: argument 'input' with value
 'ObjectValue{objectFields=[ObjectField{name='name',
 value=StringValue{value='Plant'}}, ObjectField{name='Plants',
 value=ObjectValue{objectFields=[ObjectField{name='items', value=ObjectValue{objectFields=[ObjectField{name='id', 
value=StringValue{value='f9a0468e-da74-41d5-8287-1cb6a76b25a5'}}]}}]}}]}'
 contains a field not in 'CreateResourceInput': 'Plants' @ 'createResource'

Upvotes: 0

Views: 184

Answers (2)

rdrgtec
rdrgtec

Reputation: 640

Ok, after some headache, I found what was missing in my model. For me so far it has proved to be the best way of doing this relationship...

I have added on my Plant type, on schema definition, a field named plantResourceId (other than the one used for the @connection directive). What I found out was that, by convention, when inserting/updating a record on "Plant" and adding the resource "id" field content of the resource I want to "connect" to that plant, it will automatically be retrieved when "Resources" is queried, for each item - what is better: Out-of-the-box from codegen.

Insert example

mutation CreatePlant {
   createPlant(input:{
      name: "MyPlant",
      plantResourceId: "id-for-connected-resource"
   }) {
      name,
      plantResourceId
      }
}

Query example to retrieve items:

query listPlantsOnResource {
  listResources(filter: {
    name: {
      contains: "myfilter"
    }
  }) {
    items {
      id
      name
      Plants 
        {
        items {
          id
          name
          description
        }
      }
    }
  }
}

It worked very well!

Thanks all who contributed!

Upvotes: 0

Sunny
Sunny

Reputation: 176

How did you define Plant?

And have you checked this example? https://aws-amplify.github.io/docs/cli-toolchain/graphql#connection

Upvotes: 1

Related Questions