【发布时间】:2017-07-13 09:56:21
【问题描述】:
我有两个资源:Purchase 和 Category,其中购买属于一个类别,类别有很多购买。我正在尝试允许查询,例如:
query {
purchases {
description,
amount,
category {
name
}
}
}
或
query {
categories {
name,
purchases {
description,
amount
}
}
}
在设置我的类型时,我收到以下错误:
Schema must contain unique named types but contains multiple types named "Category".
我很确定这是一个循环引用问题,但我已经使用了 thunk,因为我看到了其他答案的建议:
// Category/type.js
const {GraphQLObjectType, GraphQLInt, GraphQLString, GraphQLList} = require('graphql/type');
const {purchaseType} = require('../Purchase');
const categoryType = new GraphQLObjectType({
name: 'Category',
description: 'a purchasing category',
fields: () => ({
id: {
type: GraphQLInt
},
name: {
type: GraphQLString
},
purchases: {
type: new GraphQLList(purchaseType),
resolve (category) {
return category.getPurchases();
}
}
})
});
module.exports = categoryType;
// Category/index.js
const categoryType = require('./type');
const categoryQuery = require('./query');
module.exports = {
categoryType,
categoryQuery
};
// Purchase/type.js
const {GraphQLObjectType, GraphQLInt, GraphQLString, GraphQLFloat} = require('graphql/type');
const {categoryType} = require('../Category');
const purchaseType = new GraphQLObjectType({
name: 'Purchase',
description: 'a specific purchase',
fields: () => ({
id: {
type: GraphQLInt,
},
description: {
type: GraphQLString,
},
amount: {
type: GraphQLFloat,
},
category: {
type: categoryType,
resolve (purchase) {
return purchase.getCategory();
}
}
})
});
module.exports = purchaseType;
// Purchase/index.js
const purchaseType = require('./type');
const purchaseQuery = require('./query');
module.exports = {
purchaseType,
purchaseQuery
};
我是不是在这里搞砸了,或者我试图做的事情是不可能的?
编辑#1
是什么让我相信这是一个循环引用问题,如果我将 purchaseType 上的字段 category 更改为以下内容:
category: {
// type: categoryType,
// resolve (purchase) {
// return purchase.getCategory();
// }
type: GraphQLInt,
resolve (purchase) {
return 10;
}
}
并执行类似于categoryType purchases 字段的操作,它可以正常工作。
【问题讨论】:
标签: graphql graphql-js