Для данной схемы:
const typeDefs = gql`type Asset {
id: ID!
name: String!
ScanProfiles: [ScanProfile]
}
type ScanProfile {
id: ID!
name: String!
Assets: [Asset]
}
type Query {
Asset(id: ID!): Asset
ScanProfile(id: ID!): Asset
}`;
// Some generic resolvers...
const resolvers = {
Asset: (root, args, context) => context.get('asset', args),
ScanProfile: (root, args, context) => context.get('scanProfile, args),
Query: {
Asset: (root, args, context) => context.get('asset', args),
ScanProfile: (root, args, context) => context.get('scanProfile', args)
}
};
const schema = makeExecutableSchema({typeDefs, resolvers
const joinResolvers = {
Asset: {
ScanProfiles: (root, args, context) => {
console.log(root.ScanProfiles);
return root.ScanProfiles.map(id => context.get('scanProfile', {id});
}
},
ScanProfiles: {
Assets: (root, args, context) => {
console.log(root.id);
return context.filter('asset', {ScanProfiles: ({ScanProfiles}) => ScanProfiles.includes(root.id)});
}
}
};
addResolveFunctionsToSchema({ schema, resolvers: joinResolvers });
Я ожидаю, что context.get
для данного идентификатора вернет эти фигуры:
// Asset
{
id: '1234',
name: 'abcd',
ScanProfiles: ['5678', '5679']
}
//ScanProfile
{
id: '5678',
name: 'efgh'
}
Консоль возвращает [null]
для Asset.ScanProfiles
.
Средство распознавания корня возвращает поля в виде массива строк, но когда корень затем передается в joinResolvers
, эти файлы становятся пустыми.Я предполагаю, потому что они не соответствуют определенным typeDefs.
Чтобы обойти это, мне нужно сделать отдельный вызов, чтобы повторно получить родителя и затем извлечь сохраненные значения для ребенка.
Я неправильно определяю свой тип?Я неправильно структурирую свои резольверы?