是否可以在同一个对象中有一个 objectType
Posted
技术标签:
【中文标题】是否可以在同一个对象中有一个 objectType【英文标题】:Is it possible to have an objectType within the same object 【发布时间】:2020-05-30 11:11:11 【问题描述】:我一直在尝试获取它,以便我可以在培训类型中放置多个“培训”,因为一旦用户拥有两者,它们就会相互合并。但是我似乎无法让它工作,而且我不知道如何去做。
这是我的训练模型:
const mongoose = require('mongoose')
const Schema = mongoose.Schema
let trainingSchema = new Schema(
name:
type: String,
required: true,
unique: true
,
shortHand:
type: String,
required: true,
unqiue: true
,
desc: type: String ,
office:
type: Schema.Types.ObjectId,
ref: "Office"
,
isMerge: type: Boolean, default: false,
mergeInto: [
type: Schema.Types.ObjectId,
ref: "Training"
]
)
module.exports = mongoose.model('Training', trainingSchema)
这是我的训练对象
/**
* Defines Training Type
*/
const TrainingType = new GraphQLObjectType(
name: "Training",
fields:
id: type: GraphQLID ,
name: type: GraphQLString ,
shortHand: type: GraphQLString ,
desc: type: GraphQLString ,
office:
type: require('./office').OfficeType,
resolve: async (office) =>
return await Office.findById(office.office)
,
isMerge: type: GraphQLBoolean ,
mergeInto:
type: new GraphQLList(TrainingType), // This is the error line
resolve: async (training) =>
return await Training.find(id: training.id)
)
module.exports.TrainingType = TrainingType
现在显然我得到的错误是 TrainingType 未定义,因为我正在尝试使用尚未完全定义的东西。但是我尝试了其他方法,例如制作一个名为 MergesInto 的不同 objectType,然后在另一个中使用它。但这也不起作用,因为一个需要另一个,并且必须在另一个之前定义一个,这会给我错误未定义。我似乎无法弄清楚如何让它工作。这甚至可能吗?
【问题讨论】:
【参考方案1】:fields
可以是对象,也可以是返回 1 的函数。将其设为函数会延迟函数内部代码的执行,因此您可以毫无错误地引用TrainingType
变量。
const TrainingType = new GraphQLObjectType(
name: "Training",
fields: () => (
...
mergeInto:
type: new GraphQLList(TrainingType),
...
,
)
)
【讨论】:
以上是关于是否可以在同一个对象中有一个 objectType的主要内容,如果未能解决你的问题,请参考以下文章