Modular content fields
If you have Modular Content fields, you can use GraphQL fragments to fetch information about all their embedded blocks.
Suppose a blog_post
model has a modular content field called content
, which in turn accepts the following block models:
Block
blog_post_text_block
: made of atext
field (multi-paragraph text);Block
blog_post_quote_block
: made of aquote
field (multi-paragraph text) andauthor
field (single-line string);Block
blog_post_gallery_block
: made of agallery
field (image gallery);
This GraphQL query will do the work:
query { allBlogPosts { title content { ... on BlogPostTextBlockRecord { id _modelApiKey text } ... on BlogPostQuoteBlockRecord { id _modelApiKey quote author } ... on BlogPostGalleryBlockRecord { id _modelApiKey gallery { url } } } }}
Since all records implement the GraphQL interface RecordInterface
, you can dry up the same query like this:
query { allBlogPosts { title content { ... on RecordInterface { id _modelApiKey } ... on BlogPostTextBlockRecord { text } ... on BlogPostQuoteBlockRecord { quote author } ... on BlogPostGalleryBlockRecord { gallery { url } } } }}
The outcome of this query hinges on the type of Modular Content field. If we're dealing with the Multiple Blocks variant, it'll return an array of blocks. However, if we're working with the Single Block variant, it'll simply return one block, or null
if it's absent.
Filtering records by contained blocks
If you need to filter records based on the content within their embedded blocks, please refer to the Deep filtering section of this guide, where this scenario is explained in detail.