首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多对多关系的类型元素的GraphQL解析器

问具有多对多关系的类型元素的GraphQL解析器
EN

Stack Overflow用户
提问于 2019-04-26 11:34:56
回答 1查看 936关注 0票数 1

我正在设置一个GraphQL Apollo服务器,并希望为一个对象类型定义一个解析器,该对象类型具有一个元素,该元素包含一个基于多对多关系的数据数组。

我有一个与具有多对多关系的Activity对象相关联的Measurement对象:

代码语言:javascript
复制
Measurement.belongsToMany(Activity, {
    as: 'activity',
    through: 'activity_measurement_entries',
    underscored: true
});
Activity.belongsToMany(Measurement, {
    as: 'measurements',
    through: 'activity_measurement_entries',
    underscored: true
});

当Measurement直接包含在查询中时,解析器查询适用于getActivities查询,如下所示:

代码语言:javascript
复制
getActivities: async (parent, args, { models }) => {
    const activities = await models.Activity.findAll({
        include: [{
            model: models.Measurement,
            as: 'measurements',
        }],
    });
    return activities;
},

通过Sequelize自动生成包含activity_id和measurement_id的activity_measurement表。

我想为Activity上的measurements字段定义一个解析器,如下所示,但我不确定where子句的结构,以及中间有多对多关系表的父参数中传递的内容(假设使用类似的getActivities查询来获取所有Activities和相关度量,但查询没有输入参数):

代码语言:javascript
复制
Activity: {
    measurements: (parent, args, { models }) => models.Measurement.findAll({
      where: {
        ????
      },
    }),
},

对于试图在Activity类型定义如下时获取所有Activities的查询:

代码语言:javascript
复制
getActivities: async (parent, args, { models }) => 
    models.ActivityEntry.findAll()

如果在Activity类型的measurements字段的解析器中没有where子句,那么在每个Activity下返回每个测量值(而不仅仅是通过activity_measurement表关联的测量值)。

当使用带有测量元素的单独活动类型定义时,我正在尝试弄清楚如何仅获取与要返回的活动相关联的测量结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-26 12:17:22

传递给解析程序的父值反映了父字段的解析程序返回的值。在本例中,对于measurements字段,父字段为getActivities。您将在getActivities中返回一个活动模型实例数组,因此传递给measurements字段解析器的父值也将是Activity模型的一个实例。

这意味着你可以这样做:

代码语言:javascript
复制
Activity: {
  measurements: (activity, args, { models }) => activity.getMeasurements(),
},
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55860470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档