Connecting actions with the graph¶
Table of contents
Use case¶
Actions are a way to extend your GraphQL schema with custom queries or mutations. It
is a typical use case that the custom actions’ response is actually related to
existing objects in the schema. e.g. a custom insertAuthor
action will be
related to the author
object in the schema. Hence, we would want to be able
to get information about the author
from the graph as a response of the
insertAuthor
mutation.
Using custom object types relationships¶
Actions can be connected to the rest of the graph by setting up relationships on its return output type.
This allows complex responses to be returned as an action’s response traversing the graph via the output type’s relationships.
For example, given the action:
type Mutation {
updateAuthor (
id: Int!
name: String!
): UpdateAuthorOutput
}
type UpdateAuthorOutput {
author_id : Int!
}
We can create an object relationship called updatedAuthor
between the
UpdateAuthorOutput
object type and the author
table via the
UpdateAuthorOutput::author_id -> author::id
fields.
The object type will now be modified as:
type UpdateAuthorOutput {
author_id : Int!
updatedAuthor: author
}
Now we can make a mutation request with a complex response such as:
mutation updateAuthorAndGetArticles($id: Int, $name: String) {
updateAuthor(id: $id, name: $name) {
author_id
updatedAuthor {
id
name
articles {
id
title
}
}
}
}
Creating custom object type relationships¶
You can create relationships for custom output types by:
Head to the Actions -> [action-name] -> Relationships
tab in the
console for the action returning the output type.
Set the output type relationship as shown below:

Hit Save
to create the relationship.
Go to metadata/actions.yaml
in the Hasura project directory.
Update the definition of the UpdateAuthorOutput
object type as:
- custom_types
- objects
- name: UpdateAuthorOutput
relationships:
- name: updatedAuthor
type: object
remote_table:
schema: public
name: author
field_mapping:
author_id: id
Save the changes and run hasura metadata apply
to create the relationship.