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
}
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
}
