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 a text
field (multi-paragraph text);
Block blog_post_quote_block
: made of a quote
field (multi-paragraph text) and author
field (single-line string);
Block blog_post_gallery_block
: made of a gallery
field (image gallery);
This GraphQL query will do the work:
query {allBlogPosts {titlecontent {... on BlogPostTextBlockRecord {id_modelApiKeytext}... on BlogPostQuoteBlockRecord {id_modelApiKeyquoteauthor}... on BlogPostGalleryBlockRecord {id_modelApiKeygallery { url }}}}}
Since all records implement the GraphQL interface RecordInterface
, you can dry up the same query like this:
query {allBlogPosts {titlecontent {... on RecordInterface {id_modelApiKey}... on BlogPostTextBlockRecord {text}... on BlogPostQuoteBlockRecord {quoteauthor}... 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.
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.