首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Sequelize中,更新从findAll返回的第一个实例会修改所有实例(mySQL)

问在Sequelize中,更新从findAll返回的第一个实例会修改所有实例(mySQL)
EN

Stack Overflow用户
提问于 2015-10-07 04:58:23
回答 1查看 2.4K关注 0票数 0

例如,如果Thingie是一个具有名为" details“的字段的Sequelize模型,则以下代码会将所有行的details字段设置为相同的值。(我在数据库中使用mySQL。)

代码语言:javascript
复制
Thingie.findAll().then(function(thingies) {
    thingies[0].update({ details: "details about 0" });
});

如果thingies是一个由3个项目组成的数组,则所有这三个项目都将设置其详细信息列。为了清楚起见,我只想修改第0行,但是所有的行都被修改了。

这是Sequelize中的一个bug,还是我对findAll的作用有根本的误解?

EN

回答 1

Stack Overflow用户

发布于 2015-10-12 14:35:49

据我所知,如果您想要更新findAll的所有结果,您可能需要执行以下操作:

代码语言:javascript
复制
Thingie.findAll().then(function(thingie) {
    thingie.forEach(function(t) {
        t.update({ details: "details about 0" });
    });
});

这是因为findAll返回一个结果数组,在您的示例中,thingie仅引用第一个数组元素(也称为第一个数据库结果)。

在我看来,更好的解决方案是在模型级别使用更新,而不是在实例级别。(参见http://sequelize.readthedocs.org/en/latest/api/model/#updatevalues-options-promisearrayaffectedcount-affectedrows)

这看起来会像这样:

代码语言:javascript
复制
Thingie.update({details: "details about 0"}).then(function() {
    console.log('done');
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32979623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档