Sequelize findAll() with where-parameter 返回 null 而 findByPk() 返回正确的数据

Posted

技术标签:

【中文标题】Sequelize findAll() with where-parameter 返回 null 而 findByPk() 返回正确的数据【英文标题】:Sequelize findAll() with where-parameter returns null while findByPk() returns correct data 【发布时间】: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';

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

啊,这很有意义。感谢您的快速回答,现在都返回相同的! 有时所有的 implicit 解析器在遇到错误时都没有帮助:(很高兴它现在可以工作了!

以上是关于Sequelize findAll() with where-parameter 返回 null 而 findByPk() 返回正确的数据的主要内容,如果未能解决你的问题,请参考以下文章

sequelize/sequelize-typescript - 带有 HasMany 的 findAll 返回一个对象而不是数组

使用 Sequelize 获取“TypeError:无法读取未定义的属性‘findAll’”

FindAll 包括更多关于 sequelize 查询的表

Sequelize:在 findAll 中包含连接表属性包括

Sequelize Query FindAll 不过滤

LIMIT在Sequelize findAll和findAndCountAll中返回错误的行数