Working with DataObjects

DataObject operation permissions
A look at how permissions work for DataObject queries and mutations
Versioned content
A guide on how DataObjects with the Versioned extension behave in GraphQL schemas
Nested type definitions
Define dependent types inline with a parent type
Property mapping and dot syntax
Learn how to customise field names, use dot syntax, and use aggregate functions
The DataObject model type
An overview of how the DataObject model can influence the creation of types, queries, and mutations
DataObject query plugins
Learn about some of the useful goodies that come pre-packaged with DataObject queries
DataObject inheritance
Learn how inheritance is handled in DataObject types
You are viewing docs for a pre-release version of silverstripe/graphql (4.x). Help us improve it by joining #graphql on the Community Slack, and report any issues at github.com/silverstripe/silverstripe-graphql. Docs for the current stable version (3.x) can be found here

Property mapping and dot syntax

For the most part, field names are inferred through the DataObject model, but its API affords developers full control over naming:

app/_graphql/models.yml

Page:
  fields:
    pageContent:
      type: String
      property: Content
When using explicit property mapping, you must also define an explicit type, as it can no longer be inferred.

Dot-separated accessors

Property mapping is particularly useful when using dot syntax to access fields.

app/_graphql/models.yml

MyProject\Pages\Blog:
  fields:
    title: true
    authorName:
      type: String
      property: 'Author.FirstName'

Fields on plural relationships will automatically convert to a column array:

app/_graphql/models.yml

MyProject\Pages\Blog:
  fields:
    title: true
    categoryTitles:
      type: '[String]'
      property: 'Categories.Title'
    authorsFavourites:
      type: '[String]'
      property: 'Author.FavouritePosts.Title'

We can even use a small subset of aggregates, including Count(), Max(), Min() and Avg().

app/_graphql/models.yml

MyProject\Models\ProductCategory:
  fields:
    title: true
    productCount:
      type: Int
      property: 'Products.Count()'
    averageProductPrice:
      type: Float
      property: 'Products.Avg(Price)'

Further reading

DataObject operation permissions
A look at how permissions work for DataObject queries and mutations
Versioned content
A guide on how DataObjects with the Versioned extension behave in GraphQL schemas
Nested type definitions
Define dependent types inline with a parent type
Property mapping and dot syntax
Learn how to customise field names, use dot syntax, and use aggregate functions
The DataObject model type
An overview of how the DataObject model can influence the creation of types, queries, and mutations
DataObject query plugins
Learn about some of the useful goodies that come pre-packaged with DataObject queries
DataObject inheritance
Learn how inheritance is handled in DataObject types