description |
---|
Extract interfaces and query multiple types in a single query |
Interfaces are useful when several entity types share some set of properties and one would like to have an aggregated result when such a common property is queried.
This is achieved through the natively supported GraphQL interface type and inline fragments in the output schema. For example, let us define the following input schema:
interface Profile @entity {
about: String!
}
type Member implements Profile @entity {
about: String!
handle: String!
}
type Account implements Profile @entity {
about: String!
accountId: Bytes
}
Note that interfaces should be decorated with @entity
and all the subclasses must explicitly define the inherited fields (otherwise an error will be thrown during the codegen).
The output schema will support a query by about
which puts together Member
and Account
types. Note that orderBy
is also supported for the inherited properties as well as OpenCRUD.
query {
profiles(limit: 5, offset: 5, orderBy: about_ASC, where: { about_eq: "joystreamer" }) {
about
__typename
... on Member {
handle
}
... on Account {
accountId
}
}
}