The Amplify CLI provides GraphQL directives to enhance your schema with additional capabilities such as custom indexes, authorization rules, function triggers, and more.
The following directives are supported by the AppSync service and can be used within the Amplify GraphQL schemas. These will not be processed by Amplify CLI but passed through to the service as is and will be present in the output schema. For example, Amplify’s @auth directive will add these directives under the hood to the output schema.
The @connection directive enables you to specify relationships between @model types. Currently, this supports one-to-one, one-to-many, and many-to-one relationships. You may implement many-to-many relationships using two one-to-many connections and a joining @model type. See the usage section for details.
directive @connection(keyName: String, fields: [String!]) on FIELD_DEFINITION
Relationships between types are specified by annotating fields on an @model
object type with the @connection
directive.
The fields
argument can be provided and indicates which fields can be queried by to get connected objects. The keyName
argument can optionally be used to specify the name of secondary index (an index that was set up using @key
) that should be queried from the other type in the relationship.
When specifying a keyName
, the fields
argument should be provided to indicate which field(s) will be used to get connected objects. If keyName is not provided, then @connection
queries the target table’s primary index.
In the simplest case, you can define a one-to-one connection where a project has one team
type Post @model {
id: ID!
title: String!
comments: [Comment] @connection(keyName: "byPost", fields: ["id"])
}
type Comment @model
@key(name: "byPost", fields: ["postID", "content"]) {
id: ID!
postID: ID!
content: String!
}
one-to-many connection needs an @key that allows comments to be queried by the postID and the connection uses this key to get all comments whose postID is the id of the post was called on.
You can make a connection bi-directional by adding a many-to-one connection to types that already have a one-to-many connection. In this case you add a connection from Comment to Post since each comment belongs to a post
You can implement many to many using two 1-M @connections, an @key, and a joining @model.