例如,如果Thingie是一个具有名为" details“的字段的Sequelize模型,则以下代码会将所有行的details字段设置为相同的值。(我在数据库中使用mySQL。)
Thingie.findAll().then(function(thingies) {
thingies[0].update({ details: "details about 0" });
});如果thingies是一个由3个项目组成的数组,则所有这三个项目都将设置其详细信息列。为了清楚起见,我只想修改第0行,但是所有的行都被修改了。
这是Sequelize中的一个bug,还是我对findAll的作用有根本的误解?
发布于 2015-10-12 14:35:49
据我所知,如果您想要更新findAll的所有结果,您可能需要执行以下操作:
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)
这看起来会像这样:
Thingie.update({details: "details about 0"}).then(function() {
console.log('done');
});https://stackoverflow.com/questions/32979623
复制相似问题