在 sequelize 中使用 findByPk 和 WHERE 条件

Posted

技术标签:

【中文标题】在 sequelize 中使用 findByPk 和 WHERE 条件【英文标题】:using findByPk and WHERE condition in sequelize 【发布时间】:2020-03-25 10:35:07 【问题描述】:

在 Sequelize 中,我使用的是 findByPk,但我还需要传递另一个条件

const options = 
    where:  role: 'admin' ,
;

return models.User.findByPk(id, options)
    .then((user) => ...

但即使角色不是管理员,此查询也会重新调整所有用户。我检查了生成的 SQL,我看到了 SELECT * from User WHERE id = 1 但我没有看到 AND 角色 = 'admin'。 如何使用 findByPk 并传递另一个条件?

谢谢

【问题讨论】:

如果对您有帮助,请不要忘记将我的答案标记为已接受。谢谢! @jknotek 对不起,我忘了。谢谢提醒! 没问题,谢谢! 这行得通..... 【参考方案1】:

您必须改用findOne,并将主键作为where 对象中的字段传递:

return models.User.findOne(
  where: 
    id: id,
    role: 'admin', 
  ,
)

Sequelize 文档可能有点混乱...但是,findByPk 中的 options 参数与 findOne 中的参数不同。如果您仔细查看documentation for findByPk,您会在底部看到一条注释:

有关选项的完整说明,请参阅:Model.findAll,注意 options.where 不受支持

【讨论】:

以上是关于在 sequelize 中使用 findByPk 和 WHERE 条件的主要内容,如果未能解决你的问题,请参考以下文章

如何实现请求认证?

egg.js 24.10sequelize模型-查询单个

egg.js 24.15sequelize模型-删除和批量删除

egg.js 24.14sequelize模型-修改和限制字段

Node.js学习13~基于node-sequelize的查询器,附代码举例

在 MySQL 中使用 sequelize 自动递增 id