Я настраиваю сервер 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
генерируется автоматически через Sequelize, которая содержит activity_id
и 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()
Если в резолвере нет условия where для поля measurements
типа Activity
, то каждое измерение возвращается в каждом Activity
(а не только в измерениях, связанных с таблицей activity_measurement
).
Я пытаюсь выяснить, как получить только измерения, связанные с операцией, для возврата при использовании отдельного определения типа действия с элементом измерений.