Working with DataObjects
- DataObject query plugins
- Learn about some of the useful goodies that come pre-packaged with DataObject queries
- 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
- DataObject inheritance
- Learn how inheritance is handled in DataObject types
- Property mapping and dot syntax
- Learn how to customise field names, use dot syntax, and use aggregate functions
- Nested type definitions
- Define dependent types inline with a parent type
- The DataObject model type
- An overview of how the DataObject model can influence the creation of types, queries, and mutations
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)'