将findAll()与where-parameter续传为null,而findByPk()返回正确的数据

时间:2019-07-11 08:51:58

标签: node.js graphql sequelize.js

我现在正在为GraphQL API设置解析器,并遇到关于sequelize中的findAll()函数的一些问题/问题。

我有以下两个解析器:

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,这使我感到困惑,因为sequelize执行的查询完全相同。

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';

如果这有任何区别,我正在使用apollo服务器。

1 个答案:

答案 0 :(得分:2)

findByPkfindAll之间的区别在于findByPk已经返回了一个元素,而findAll返回了array。您似乎没有考虑到这一点。之后,User的解析器收到一个数组,他们无法从中读取属性。

return (await models.User.findAll({
  where: {
    ID_User: id
  }
}))[0];