次のデータモデルがあります。
type Tvshow {
id: ID! @unique
title: String!
pricing: [Pricing]
startDate: DateTime!
endDate: DateTime!
subscribers: [Tvshowsubscription!]
.....
}
type FavoriteTvshow {
id: ID! @unique
tvshow: Tvshow!
user: User!
}
type User {
id: ID! @unique
name: String
email: String! @unique
password: String
googleID: String @unique
resetToken: String
resetTokenExpiry: String
permissions: [Permission]
address: Address
phone: String
favorites: [FavoriteTvshow!]
tvshowSubscriptions: [Tvshowsubscription!]
}
addFragmentToInfo を使用してカスタム Tvshow リゾルバを作成しました。
resolver-queries.js
const Query = {
...
favoriteTvshows: forwardTo('db'),
tvshow: (parent, args, ctx, info) => {
const fragment = `fragment EnsureComputedFields on Tvshow { pricing { minQuantity maxQuantity unitPrice} subscribers { id }}`
return ctx.db.query.tvshow({}, addFragmentToInfo(info, fragment))
},
....
};
tvshow-resolver.js
const Tvshow = {
countSubscribers: (parent) => {
return parent.subscribers.length;
},
}
これは一例です。Tvshow 用の計算フィールドが他にもあります
countSubscribers を使用して Tvshows をクエリできます。次のようにすると問題なく動作します。
query SINGLE_TVSHOW_QUERY($id: ID!) {
tvshow(where: { id: $id }) {
id
title
pricing {
minQuantity
maxQuantity
unitPrice
}
startDate
endDate
countSubscribers
}
}
しかし、私がやりたいことは、countSubscribers を返すユーザーからすべてのお気に入りのテレビ番組を取得することです。そのためのクエリは次のようになります。
query FAVORITES_FROM_USER($userId: ID!) {
favoriteTvshows(where: { user: {id: $userId} }) {
tvshow {
id
title
startDate
endDate
countSubscribers
}
}
}
問題は、これをクエリすると、前述の tvshow-resolver.js で、親にサブスクライバー オブジェクトがないことです。