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 atextfield (multi-paragraph text);Block
blog_post_quote_block: made of aquotefield (multi-paragraph text) andauthorfield (single-line string);Block
blog_post_gallery_block: made of agalleryfield (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.