2015-10-06 116 views
0

例如,如果Thingie是带有名为“details”的字段的Sequelize模型,则以下代码将所有行的详细信息字段设置为相同值。 (我使用的MySQL在数据库中。)在Sequelize中,更新从findAll返回的第一个实例修改所有实例(mySQL)

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

如果一样的东西是3项的数组,这三个都会有自己的细节列集。要清楚,我只是试图修改第0行,但所有的行都被修改了。

这是一个Sequelize中的错误还是对findAll有什么根本的误解?

+0

尝试增加的PrimaryKey:忠实于id字段模型定义文件。 –

+0

你能提供关于设置'Thingie'的代码吗?我认为有一个完整的示例代码可以帮助我们发现代码出了什么问题。 – Brian

回答

0

从我的理解,如果你想更新的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'); 
}); 
+0

对不起,我的描述一定不清楚。 (我已经更新了。)问题是我只修改FindAll返回的第一个项目,但实际发生的是所有项目都被修改。 – bvs

相关问题