无法将自定义结果从解析程序传递到Graphql
我正在尝试使用带有属性的sequelize获取数据,并将其传递给graphql。 控制台中的结果很好,但graphql查询为属性字段返回null 我的解析器无法将自定义结果从解析程序传递到Graphql,graphql,sequelize.js,apollo,Graphql,Sequelize.js,Apollo,我正在尝试使用带有属性的sequelize获取数据,并将其传递给graphql。 控制台中的结果很好,但graphql查询为属性字段返回null 我的解析器 getUnpayedLessons: async (_, args, { models }) => { const { Attendance, Student } = models; return await Attendance.findAll({ include: { model: Studen
getUnpayedLessons: async (_, args, { models }) => {
const { Attendance, Student } = models;
return await Attendance.findAll({
include: {
model: Student,
},
where: {
fk_lessonsSerieId: { [Op.is]: null },
},
attributes: ["id", [sequelize.fn("count", sequelize.col("absenceFlag")), "unpayedLessons"]],
group: ["student.id"],
});
},
质疑
模式
type UnpayedLessons {
id: Int
unpayedLessons: Int
student: Student
}
extend type Query {
getUnpayedLessons: [UnpayedLessons]
}
这是运行查询时解析程序的console.log
[
attendance {
dataValues: { id: 2, unpayedLessons: 8, student: [student] },
_previousDataValues: { id: 2, unpayedLessons: 8, student: [student] },
_changed: Set {},
_options: {
isNewRecord: false,
_schema: null,
_schemaDelimiter: '',
include: [Array],
includeNames: [Array],
includeMap: [Object],
includeValidated: true,
attributes: [Array],
raw: true
},
]
从graphql
{
"data": {
"getUnpayedLessons": [
{
"id": 2,
"unpayedLessons": null,
"student": {
"id": 2,
"__typename": "Student"
},
"__typename": "UnpayedLessons"
},
]
}
}
知道如何将unpayedLessons传递给graphql吗?要调试此功能,您需要检查DB返回的内容,形状:
const values = await Attendance.findAll({...
console.log( values );
// adapt structure to match query requirements
// finally return
return values;
我的错误,实际上是控制台中的结果([Attention{datavalues{…)正是这样。为了清晰起见,我在这里更改了解析器,但我有您在现实中描述的console.log。在我看来,数据值与查询的形状相同。否?
DataValues
不是所需查询结果的一部分-类型为UnpayedLessons的数组…转换/适应所需的形状确定了,它可以工作了!但不太清楚为什么。或者更好的是,为什么以前没有工作。只是自定义属性没有传递,而且在我没有放置自定义属性时形状相同,从来没有出现过任何问题…IDK…嗯,squelize不是为了满足apollo的要求而设计的,但可能apollo可以/被改编为使用一些**常见**/可能的数据结构[从libs/DB/adapters返回]并且能够将它们与所需的返回类型相匹配-不是所有用例
const values = await Attendance.findAll({...
console.log( values );
// adapt structure to match query requirements
// finally return
return values;