在续集中使用 findByPk 和 WHERE 条件

han*_*ome 10 sequelize.js

在 Sequelize 我使用 findByPk 但我还需要通过另一个条件

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

return models.User.findByPk(id, options)
    .then((user) => {...
Run Code Online (Sandbox Code Playgroud)

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

谢谢你

jkn*_*tek 18

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

return models.User.findOne({
  where: {
    id: id,
    role: 'admin', 
  },
})
Run Code Online (Sandbox Code Playgroud)

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

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