graphql查询SQL父子关系
我有一个postgres表,它表示具有父子表的层次结构: 表(类别): 预期结果:graphql查询SQL父子关系,graphql,graphql-js,Graphql,Graphql Js,我有一个postgres表,它表示具有父子表的层次结构: 表(类别): 预期结果: categories: [ { name: "CatA", children: [ { name: "CatC", children: [ { name: "CatE", children: [] }] }, {
categories:
[
{
name: "CatA",
children: [
{
name: "CatC",
children: [
{
name: "CatE",
children: []
}]
},
{
name: "CatD",
children: []
}
],
},
{
name: "CatB",
children: []
}
]
问题是我不知道有多少层,所以我无法查询以下内容:
category {
name
parent {
name
parent {
name
...
实际上,您可以使用GraphQL实现潜在的无限递归。因此,如果您不知道使用模式的深度,它并不介意 我能够用这个模式重现你想要的结果。我希望它可以帮助您:
const categories = [
{
name: 'CatA',
children: [
{
name: 'CatC',
children: [
{
name: 'CatE',
children: []
}]
},
{
name: 'CatD',
children: []
}
]
},
{
name: 'CatB',
children: []
}
];
const categoryType = new GraphQLObjectType({
name: 'CategoryType',
fields: () => ({
name: { type: GraphQLString },
children: { type: new GraphQLList(categoryType) }
})
});
const queryType = new GraphQLObjectType({
name: 'RootQuery',
fields: () => ({
categories: {
type: new GraphQLList(categoryType),
resolve: () => categories
}
})
});
我得到了这个结果:
请注意,我将
字段
属性定义为函数,而不是普通对象。定义为对象的字段
属性将失败,并且不允许您在字段中使用categoryType
变量,因为在执行时它不存在
fields: () => ({
...
})
在SQL数据库之上使用GraphQL的困难之一是协调这两种范式。GraphQL是分层的。SQL数据库是关系数据库。两者之间并不总是有明确的对应关系
我们开源了一个框架,它以一种自以为是的方式设置您的模式。如果这样做,它会自动为您生成SQL查询。它的核心思想是关系。理论上,您可以在GraphQL查询中实现任意深度。您好,这种方法需要使用查询。如果用户不知道孩子的深度是多少呢。我的问题是,这可以实现自动循环通过儿童吗?
fields: () => ({
...
})