Graphql 自定义连接

Posted

技术标签:

【中文标题】Graphql 自定义连接【英文标题】:Graphql custom defined join 【发布时间】:2018-01-15 03:05:19 【问题描述】:

我使用 sequelize 为基于 js 的 graphql 服务器定义了以下表格(为简洁起见,省略了许多其他实体)

const MetaData = sequelize.define(
  "MetaData",
  
    MetaID: 
        type: Sequelize.INTEGER,
        autoIncrement: true,
        primaryKey: true
    ,
    EntityID: 
        type: Sequelize.INTEGER
    ,
    EntityType: 
        type: Sequelize.STRING
    ,
    MetaKey: 
        type: Sequelize.STRING
    ,
    MetaValue: 
        type: Sequelize.STRING
    
  
);
const Staff = sequelize.define(
  "staff",
  
    staffID: 
        type: Sequelize.INTEGER,
        autoIncrement: true,
        primaryKey: true
    ,
    email: 
        type: Sequelize.STRING
    ,
    firstName: 
        type: Sequelize.STRING
    ,
    lastName: 
        type: Sequelize.STRING
    
  
);
const Person = sequelize.define(
  "Person",
  
    personID: 
        type: Sequelize.INTEGER,
        autoIncrement: true,
        primaryKey: true
    ,
    firstName: Sequelize.STRING,
    lastName: Sequelize.STRING
  
);

元数据表的示例是

[
 EntityID: 5,
 EntityType: "Staff",
 MetaKey: "Active",
 MetaValue: "true"
,
 EntityID: 5,
 EntityType: "Person",
 MetaKey: "HairColor",
 MetaValue: "Blue"
]

有没有办法在graphqlsequelize 中创建一个查询,该查询将返回与请求的类型关联的元数据? 自定义解析器是否能够在不进行大量额外调用的情况下解决此解决方案?

例如,当我请求工作人员时,我希望能够接收所有相关的元数据。

编辑: 根据the sequelize docs on polymorphic associations 我添加了以下内容,但没有返回数据

Staff.MetaData = Staff.hasMany(MetaData, 
  foreignKey: 'EntityID',
  constraints: 'false',
  scope: 
      EntityType: 'Staff'
  
);
MetaData.belongsTo(Staff, 
  foreignKey: 'EntityID',
  constraints: false,
  as: 'Staff'
);

MetaData.getItem = function () 
  return this['get' + this.get('EntityType')]();
;

【问题讨论】:

【参考方案1】:

原来我在 resolvers.js 中错过了一个调用

Staff: 
  MetaData: resolver(Staff.MetaData)

【讨论】:

以上是关于Graphql 自定义连接的主要内容,如果未能解决你的问题,请参考以下文章

Gatsby:在自定义帖子类型上使用 GraphQL 查询和自定义分类

OrchardCore 中为现有类型 实现自定义 Graphql 查询

GraphQL - 自定义字段 [重复]

解析graphql查询后实现自定义逻辑

无法将 GraphQL 自定义类型作为 Postman 变量

如何使用 GraphQL 自定义的 Authentication 类?