我现在正在为 GraphQL API 设置解析器,并遇到了一些关于 sequelize 的 findAll(( 函数的问题/疑问。
我有以下 2 个解析器:
User: async (parent, { id }, { models }) => {
return await models.User.findAll({
where: {
ID_User: id
}
});
}
UserPK: async (parent, { id }, { models }) => {
return await models.User.findByPk(id);
}
模型:
type Query {
UserPK(id: ID): User
User(id: ID): User
}
type User {
ID_User: ID,
Username: String,
}
如果我现在运行这些查询
{
UserPK(id: 1) {
ID_User
Username
}
User(id: 1) {
ID_User
Username
}
}
只有 UserPK 返回(正确的(数据,User 查询为每个字段返回 null,这让我感到困惑,因为查询续集执行完全相同。
Executing (default): SELECT `ID_User`, `Username` FROM `User` AS `User` WHERE `User`.`ID_User` = '1';
Executing (default): SELECT `ID_User`, `Username` FROM `User` AS `User` WHERE `User`.`ID_User` = '1';
顺便说一句,我正在使用阿波罗服务器,如果这有什么不同的话。
findByPk
和 findAll
之间的区别在于findByPk
已经返回单个元素,而findAll
返回数组。你似乎没有考虑到这一点。之后,User
解析器接收一个数组,它们无法从中读取属性。
return (await models.User.findAll({
where: {
ID_User: id
}
}))[0];