中继中的自引用连接?
Self-referencing connections in Relay?
使用 Relay,我可以创建到 GraphQL 类型的连接,然后使用该连接定义其他类型的字段。
但是,是否可以创建一个连接,并在同一类型中使用它?我的基础数据源是带有自引用键的 SQL table。当表示为图形时,数据中没有循环。我可以通过创建 "self" 连接直接在 GraphQL 中对这种关系建模吗,或者这是错误的方法吗?如果不在我的代码中创建循环模块依赖项,我无法找到执行此操作的方法。
如果我以 "flattened" 的方式考虑这些数据,而放弃自连接的想法,我会更好吗?有想法吗?
我能够使用如下代码创建自引用连接(使用 graphql 0.6.0 和 graphql-relay 0.4.2:
import { GraphQLObjectType } from 'graphql';
import {
connectionArgs,
connectionDefinitions,
connectionFromArray,
globalIdField,
} from 'graphql-relay';
import { nodeInterface } from './nodeDefinitions';
import { getRelatedData } from './dataSource';
const dataType = new GraphQLObjectType({
name: 'Data',
fields: () => ({
id: globalIdField('Data'),
related: {
type: connectionDefinitions({
name: 'Data',
nodeType: dataType,
}).connectionType,
args: connectionArgs,
resolve: (parent, args) => connectionFromArray(
getRelatedData(parent.id),
args
),
},
}),
interfaces: () => [nodeInterface],
});
使用 Relay,我可以创建到 GraphQL 类型的连接,然后使用该连接定义其他类型的字段。
但是,是否可以创建一个连接,并在同一类型中使用它?我的基础数据源是带有自引用键的 SQL table。当表示为图形时,数据中没有循环。我可以通过创建 "self" 连接直接在 GraphQL 中对这种关系建模吗,或者这是错误的方法吗?如果不在我的代码中创建循环模块依赖项,我无法找到执行此操作的方法。
如果我以 "flattened" 的方式考虑这些数据,而放弃自连接的想法,我会更好吗?有想法吗?
我能够使用如下代码创建自引用连接(使用 graphql 0.6.0 和 graphql-relay 0.4.2:
import { GraphQLObjectType } from 'graphql';
import {
connectionArgs,
connectionDefinitions,
connectionFromArray,
globalIdField,
} from 'graphql-relay';
import { nodeInterface } from './nodeDefinitions';
import { getRelatedData } from './dataSource';
const dataType = new GraphQLObjectType({
name: 'Data',
fields: () => ({
id: globalIdField('Data'),
related: {
type: connectionDefinitions({
name: 'Data',
nodeType: dataType,
}).connectionType,
args: connectionArgs,
resolve: (parent, args) => connectionFromArray(
getRelatedData(parent.id),
args
),
},
}),
interfaces: () => [nodeInterface],
});