在 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.15sequelize模型-删除和批量删除
egg.js 24.14sequelize模型-修改和限制字段