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】:findByPk
和 findAll
之间的区别在于 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’”