首页 文章

在续集中只更新一行

提问于
浏览
5

我正在使用 Sequelize 作为ORM以及 express.js 以下是我的简约表结构 .

Id  status          phone

1     0             09620701828
2     0             09620701828

现在当api请求要在终点上进行时,我必须更新属于我从请求获得的特定电话的最后一个id的状态 . 原始的MySql查询将是 UPDATE table SET status=1 where phone='09620701828' ORDER BY id DESC LIMIT 1;

我如何使用Sequelize更新方法实现相同目的 . 以下是我的尝试

models.customerLeadFeedback.update(
    {status: 1},
    { 
        where: {phone : '09620701828'},
        order: [['id', 'DESC']],
        limit : 1

    }).then(function () {
        res.sendStatus(200);
    })`

但order by子句不适用于上面和更新id的状态1.任何人都可以帮助我,而不使用 sequelize 中的原始查询 .

1 回答

  • 9

    看来Sequelize的 Model#update 函数不支持订购 - 请参阅http://sequelize.readthedocs.io/en/v3/api/model/#updatevalues-options-promisearrayaffectedcount-affectedrows上的文档

    如果您确实希望通过排序来定位行,则可以先获取行,然后更新它:

    models.customerLeadFeedback.findOne(
      {status: 1},
      { 
        where: {phone : '09620701828'},
        order: [['id', 'DESC']]
    }).then(function (record) {
      return record.update({status: 1});
    }).then(function (record) {
        res.sendStatus(200);
    });
    

    使用两个查询而不是一个查询效率较低,但如果您不想使用原始查询,则目前看起来是唯一的选择 .

相关问题