具有多对多关系的类型元素的 GraphQL 解析器
GraphQL resolver for type element having many to many relationship
我正在设置一个 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
});
当 Measurement
直接包含在查询中时,解析器查询对 getActivities
查询工作正常:
getActivities: async (parent, args, { models }) => {
const activities = await models.Activity.findAll({
include: [{
model: models.Measurement,
as: 'measurements',
}],
});
return activities;
},
通过Sequelize自动生成一个activity_measurement
table,其中包含activity_id
和measurement_id
.
我想为 Activity
上的 measurements
字段定义解析器,如下所示,但我不确定如何构建 where 子句以及在父参数中传递的内容中间的多对多关系 table(假设类似的 getActivities
查询用于获取所有 Activities
和关联的测量值,但查询没有输入参数):
Activity: {
measurements: (parent, args, { models }) => models.Measurement.findAll({
where: {
????
},
}),
},
对于尝试获取所有 Activities
的查询,当 Activity
类型定义如下:
getActivities: async (parent, args, { models }) =>
models.ActivityEntry.findAll()
如果 Activity
类型的 measurements
字段的解析器中没有 where 子句,则每个 Activity
下的每个测量都返回(而不是仅通过关联的测量activity_measurement
table).
我想弄清楚如何在将单独的 Activity 类型定义与测量元素一起使用时仅获取与要返回的 Activity 关联的测量值。
传递给解析器的父值反映了在父字段的解析器中返回的值。在这种情况下,对于 measurements
字段,父字段是 getActivities
。您要在 getActivities
中返回一个 Activity 模型实例数组,因此传递给 measurements
字段解析器的父值也将是您的 Activity
模型的一个实例。
这意味着您可以执行以下操作:
Activity: {
measurements: (activity, args, { models }) => activity.getMeasurements(),
},
我正在设置一个 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
});
当 Measurement
直接包含在查询中时,解析器查询对 getActivities
查询工作正常:
getActivities: async (parent, args, { models }) => {
const activities = await models.Activity.findAll({
include: [{
model: models.Measurement,
as: 'measurements',
}],
});
return activities;
},
通过Sequelize自动生成一个activity_measurement
table,其中包含activity_id
和measurement_id
.
我想为 Activity
上的 measurements
字段定义解析器,如下所示,但我不确定如何构建 where 子句以及在父参数中传递的内容中间的多对多关系 table(假设类似的 getActivities
查询用于获取所有 Activities
和关联的测量值,但查询没有输入参数):
Activity: {
measurements: (parent, args, { models }) => models.Measurement.findAll({
where: {
????
},
}),
},
对于尝试获取所有 Activities
的查询,当 Activity
类型定义如下:
getActivities: async (parent, args, { models }) =>
models.ActivityEntry.findAll()
如果 Activity
类型的 measurements
字段的解析器中没有 where 子句,则每个 Activity
下的每个测量都返回(而不是仅通过关联的测量activity_measurement
table).
我想弄清楚如何在将单独的 Activity 类型定义与测量元素一起使用时仅获取与要返回的 Activity 关联的测量值。
传递给解析器的父值反映了在父字段的解析器中返回的值。在这种情况下,对于 measurements
字段,父字段是 getActivities
。您要在 getActivities
中返回一个 Activity 模型实例数组,因此传递给 measurements
字段解析器的父值也将是您的 Activity
模型的一个实例。
这意味着您可以执行以下操作:
Activity: {
measurements: (activity, args, { models }) => activity.getMeasurements(),
},