在续集中使用findByPk和WHERE条件

时间:2019-11-29 21:59:38

标签: sequelize.js

在Sequelize中,我正在使用findByPk,但我还需要传递其他条件

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

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

但是,即使角色不是admin,此查询也会重新调整所有用户。我检查了生成的SQL,我看到了 从用户WHERE ID = 1中选择*,但我没有看到AND角色='admin'。 如何使用findByPk并通过其他条件?

谢谢

1 个答案:

答案 0 :(得分:0)

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

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

Sequelize文档可能会有些混乱……但是,options中的findByPk参数与findOne中的参数没有相同的值。如果您仔细观察documentation for findByPk,则会在底部看到一条注释,内容为:

  

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