【问题标题】:Update only one row in sequelize在 sequelize 中只更新一行
【发布时间】:2017-03-17 04:11:55
【问题描述】:

我使用Sequelizeexpress.js 作为ORM 下面是我的简约表结构。

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 中的原始查询的情况下帮助我。

【问题讨论】:

    标签: node.js express sequelize.js


    【解决方案1】:

    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);
    });
    

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

    【讨论】:

    • 我认为在第一个查询中您忘记将 update 更改为 findOne 或 findAll rest 它会起作用,我认为使用原始查询会更有效。
    • 哎呀!解决了这个问题。您可能想在 sequelize github 上提出问题/公关 - 从我对他们代码的松散知识来看,这应该是一个微不足道的补充
    • return record.update({status: 1}) 谢谢这条线救救我。
    猜你喜欢
    • 2019-06-13
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 2012-08-10
    • 1970-01-01
    相关资源
    最近更新 更多