私はJavascriptを初めて使用しています。この問題の解決方法はわかりません。私は3つのタイプを定義したいと思い、データベースにクエリを提供するために、GraphQLサービスを作成しています:人、会社との関係をGraphQLコードのJavaScript循環依存性
type Relation: {
person: Person
company: Company
}
type Person: {
relationship: Relation
}
type Company: {
relationship: Relation
}
をあなたが見ることができるように、それらが相互に依存している、私は人と会社undefined
を得ますこれを解決する方法はありますか?あなたが必要と
// -------------------- Object(company) --------------------
objectType = new GraphQLObjectType ({
name: 'Object',
description: 'Object could be a Company, FinancialOrg, Person or Product.',
fields: {
id: {
type: new GraphQLNonNull(GraphQLString),
},
entity_type: {
type: new GraphQLNonNull(GraphQLString),
description: 'could be Company, FinancialOrg, Person or Product.'
},
entity_id: {
type: new GraphQLNonNull(GraphQLInt),
},
parent_id: {
type: GraphQLString,
},
name: {
type: new GraphQLNonNull(GraphQLString),
},
normalized_name: {
type: new GraphQLNonNull(GraphQLString),
},
permalink: {
type: new GraphQLNonNull(GraphQLString),
}
},
resolveType: function(object) {
return dbHandler.findObjectById(object.id);
}
})
// -------------------- Relationship --------------------
var relationshipType = new GraphQLObjectType({
name: 'Relationship',
description: 'Describe the relationship between a person and a object(Corporation, fund)',
fields: {
id: {
type: new GraphQLNonNull(GraphQLInt),
},
relationship_id: {
type: new GraphQLNonNull(GraphQLInt),
},
person_object_id: {
type: new GraphQLNonNull(GraphQLString),
},
relationship_object_id: {
type: new GraphQLNonNull(GraphQLString),
description: 'A Corporation or a Fund',
},
}
});
// -------------------- Person Type --------------------
personType = new GraphQLObjectType ({
name: 'Person',
fields: {
id: {
type: new GraphQLNonNull(GraphQLInt),
},
object_id: {
type: new GraphQLNonNull(GraphQLString),
},
first_name: {
type: new GraphQLNonNull(GraphQLString),
},
last_name: {
type: new GraphQLNonNull(GraphQLString),
},
birthplace: {
type: GraphQLString
},
affiliation_name: {
type: GraphQLString
},
},
});
タイプを異なる方法でモデル化することは可能かもしれません。あなたのデータベーススキーマの様子の詳細を教えてください。 –
ありがとうございます@AhmadFerdousBinAlam私はこれを解決する方法を理解しています、私は実際にすべての3つのタイプの関係、人と会社のリンクを解除したが、 '関係'内の3つのより複雑なバージョンで別の層を作成しました。 – Yechen
私は自分のプロジェクトでこの問題を抱えていました。答えはGraphQLに 'Interfaces'を使うことです。 http://graphql.org/docs/api-reference-type-system/#graphqlinterfacetype – Chris