使用 where-parameter 续集 findAll() 返回 null,而 findByPk() 返回正确的数据



我现在正在为 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';

顺便说一句,我正在使用阿波罗服务器,如果这有什么不同的话。

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

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

最新更新