Graphql自定义连接

时间:2017-08-07 18:08:50

标签: javascript sequelize.js graphql

我使用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 个答案:

答案 0 :(得分:0)

事实证明我在resolvers.js中错过了一个电话

Staff: {
  MetaData: resolver(Staff.MetaData)
}