我正在设置一个GraphQL Apollo服务器,并希望为一个对象类型定义一个解析器,该对象类型具有一个元素,该元素包含一个基于多对多关系的数据数组。
我有一个与具有多对多关系的Activity对象相关联的Measurement对象:
Measurement.belongsToMany(Activity, {
as: 'activity',
through: 'activity_measurement_entries',
underscored: true
});
Activity.belongsToMany(Measurement, {
as: 'measurements',
through: 'activity_measurement_entries',
underscored: true
});当Measurement直接包含在查询中时,解析器查询适用于getActivities查询,如下所示:
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和相关度量,但查询没有输入参数):
Activity: {
measurements: (parent, args, { models }) => models.Measurement.findAll({
where: {
????
},
}),
},对于试图在Activity类型定义如下时获取所有Activities的查询:
getActivities: async (parent, args, { models }) =>
models.ActivityEntry.findAll()如果在Activity类型的measurements字段的解析器中没有where子句,那么在每个Activity下返回每个测量值(而不仅仅是通过activity_measurement表关联的测量值)。
当使用带有测量元素的单独活动类型定义时,我正在尝试弄清楚如何仅获取与要返回的活动相关联的测量结果。
发布于 2019-04-26 12:17:22
传递给解析程序的父值反映了父字段的解析程序返回的值。在本例中,对于measurements字段,父字段为getActivities。您将在getActivities中返回一个活动模型实例数组,因此传递给measurements字段解析器的父值也将是Activity模型的一个实例。
这意味着你可以这样做:
Activity: {
measurements: (activity, args, { models }) => activity.getMeasurements(),
},https://stackoverflow.com/questions/55860470
复制相似问题