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

Thingie.findAll().then(function(thingies) {
    thingies[0].update({ details: "details about 0" });
});


如果thingies是一个由3个项目组成的数组,则所有三个项目都将设置其details列。需要明确的是,我仅尝试修改第0行,但所有行都已被修改。

这是Sequelize中的错误,还是对findAll的功能有基本的误解?

最佳答案

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

Thingie.findAll().then(function(thingie) {
    thingie.forEach(function(t) {
        t.update({ details: "details about 0" });
    });
});


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

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

最终看起来像:

Thingie.update({details: "details about 0"}).then(function() {
    console.log('done');
});

09-13 10:37