I’ve already made a post about expanding compositions or associations (see here), but this time I had to extend two levels deep.
My entity structure looked something to this:
entity Header: cuid, managed {
Items : Composition of many Header.Items
on Items.purgeRun = $self;
}
entity Header.Items : cuid, managed {
file : Association to Files @mandatory @assert.target;
header: Association to Header;
}
entity Files : cuid, managed {
content : LargeBinary @Core.MediaType: mediaType @Core.ContentDisposition.Filename: fileName @Core.ContentDisposition.Type: 'inline';
mediaType : String @Core.IsMediaType: true;
fileName : String @mandatory;
size : Integer;
}
It is possible to query all data in a single HTTP call using $expand
twice.
### Header + Items + File
GET {{server}}/odata/v4/service/MainEntity/{{ID}}
?$expand=Items($expand=file)
Authorization: Basic {{username}} {{password}}
However, if you want to fetch the same data using CQL, the following query is required:
const data = await SELECT(Header, ID)
.columns(h => {
h('*')
h.Items(i => {
i('*')
i.file(f => f('*'))
})
})
This syntax is really hard to remember…