我正在设置GraphQL Apollo服务器,并想为一个对象类型定义一个解析器,该对象类型具有一个元素,该元素包含一个基于多对多关系的数据数组。
我有一个Measurement
对象,它与一个具有多对多关系的Activity
对象相关联:
Measurement.belongsToMany(Activity, {
as: 'activity',
through: 'activity_measurement_entries',
underscored: true
});
Activity.belongsToMany(Measurement, {
as: 'measurements',
through: 'activity_measurement_entries',
underscored: true
});
当getActivities
直接包含在查询中时,解析器查询可以很好地用于Measurement
查询:
getActivities: async (parent, args, { models }) => {
const activities = await models.Activity.findAll({
include: [{
model: models.Measurement,
as: 'measurements',
}],
});
return activities;
},
通过activity_measurement
和activity_id
组成的Sequelize会自动生成measurement_id
表。
我想为measurements
上的Activity
字段定义一个解析器,如下所示,但是我不确定如何构造where子句以及在带有许多参数的父参数中传递的内容到中间的许多关系表(假设使用类似的getActivities
查询来获取所有Activities
和相关的度量值,但查询没有输入参数):
Activity: {
measurements: (parent, args, { models }) => models.Measurement.findAll({
where: {
????
},
}),
},
对于这样的查询,当Activities
类型定义如下时,尝试获取所有Activity
:
getActivities: async (parent, args, { models }) =>
models.ActivityEntry.findAll()
如果解析器中没有针对measurements
类型的Activity
字段的where子句,则每个度量都将返回到每个Activity
下(而不只是通过{相关联的度量) {1}}表)。
我试图弄清楚如何在将单独的Activity类型定义与Measurements元素一起使用时,仅获取与Activity相关的度量。
答案 0 :(得分:0)
传递给解析器的父值反映了在父字段的解析器中返回的值。在这种情况下,对于measurements
字段,父字段为getActivities
。您将在getActivities
中返回一个Activity模型实例数组,因此传递给measurements
字段解析器的父值也将是Activity
模型的实例。
这意味着您可以执行以下操作:
Activity: {
measurements: (activity, args, { models }) => activity.getMeasurements(),
},