【问题标题】:Sequelize findAll() with where-parameter returns null while findByPk() returns correct dataSequelize findAll() with where-parameter 返回 null 而 findByPk() 返回正确的数据
【发布时间】:2019-11-20 22:31:00
【问题描述】:

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

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

【问题讨论】:

    标签: node.js graphql sequelize.js


    【解决方案1】:

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

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

    【讨论】:

    • 啊,这很有意义。感谢您的快速回答,现在都返回相同的!
    • 有时所有的 implicit 解析器在遇到错误时都没有帮助:(很高兴它现在可以工作了!
    猜你喜欢
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 2020-11-05
    • 2019-10-02
    • 2019-04-30
    • 1970-01-01
    相关资源
    最近更新 更多