Using variables / aliases / fragments / directives in queries¶
Table of contents
Using variables¶
In order to make a query re-usable, it can be made dynamic by using variables.
Example: Fetch an author by their author_id
:
query getArticles($author_id: Int!) {
articles(
where: { author_id: { _eq: $author_id } }
) {
id
title
}
}
with variables:
{
"author_id": 1
}
Variables and performance
Variables have an impact on query performance. Refer to query performance to learn more about Hasura’s query plan caching and about optimizing when using variables.
Using aliases¶
Aliases can be used to return objects with a different name than their field name. This is especially useful while fetching the same type of objects with different arguments in the same query.
Example: First, fetch all articles. Second, fetch the two top-rated articles. Third, fetch the worst-rated article:
query getArticles {
articles {
title
rating
}
topTwoArticles: articles(
order_by: {rating: desc},
limit: 2
) {
title
rating
}
worstArticle: articles(
order_by: {rating: asc},
limit: 1
) {
title
rating
}
}
Using fragments¶
Sometimes, queries can get long and confusing. A fragment is a set of fields with any chosen name. This fragment can then be used to represent the defined set.
Example: Creating a fragment for a set of article
fields (id
and title
) and using it in a query:
fragment articleFields on articles {
id
title
}
query getArticles {
articles {
...articleFields
}
topTwoArticles: articles(
order_by: {rating: desc},
limit: 2
) {
...articleFields
}
}
Using directives¶
Directives make it possible to include or skip a field based on a boolean expression passed as a query variable.
@include(if: Boolean)¶
With @include(if: Boolean)
, it is possible to include a field in the query result based on a Boolean expression.
Example: The query result includes the field publisher
, as $with_publisher
is set to true
:
query getArticles($with_publisher: Boolean!) {
articles {
title
publisher @include(if: $with_publisher)
}
}
with variables:
{
"with_publisher": true
}
Example: The query result doesn’t include the field publisher
, as $with_publisher
is set to false
:
query getArticles($with_publisher: Boolean!) {
articles {
title
publisher @include(if: $with_publisher)
}
}
with variables:
{
"with_publisher": false
}
@skip(if: Boolean)¶
With @skip(if: Boolean)
, it is possible to exclude (skip) a field in the query result based on a Boolean expression.
Example: The query result doesn’t include the field publisher
, as $with_publisher
is set to true
:
query getArticles($with_publisher: Boolean!) {
articles {
title
publisher @skip(if: $with_publisher)
}
}
with variables:
{
"with_publisher": true
}
Example: The query result includes the field publisher
, as $with_publisher
is set to false
:
query getArticles($with_publisher: Boolean!) {
articles {
title
publisher @skip(if: $with_publisher)
}
}
with variables:
{
"with_publisher": false
}