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

在Sequelize中,更新findAll返回的第一个实例会修改所有实例(mySQL),mysql,sequelize.js,Mysql,Sequelize.js,例如,如果Thingie是一个Sequelize模型,其字段名为“details”,则以下代码将所有行的details字段设置为相同的值。(我正在数据库中使用mySQL。) 如果thingies是一个由3项组成的数组,那么这三项都将设置其详细信息列。要明确的是,我只是试图修改第0行,但所有行都被修改了 这是Sequelize中的一个bug,还是我对findAll的工作有一个根本性的误解?据我所知,如果您想更新findAll的所有结果,您可能需要执行以下操作: Thingie.findAll().

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

如果thingies是一个由3项组成的数组,那么这三项都将设置其详细信息列。要明确的是,我只是试图修改第0行,但所有行都被修改了


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

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

Thingie.findAll().then(function(thingie) {
    thingie.forEach(function(t) {
        t.update({ details: "details about 0" });
    });
});
这是因为findAll返回一个结果数组,在您的示例中,thingie[0]只引用了第一个数组元素(即第一个数据库结果)

在我看来,一个更好的解决方案是在模型级别而不是实例级别使用更新。(见附件)

这将最终看起来像:

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

对不起,我的描述一定不清楚。(我已经更新了它。)问题是我只是修改了FindAll返回的第一个项目,但实际情况是所有项目都被修改了。请尝试将primaryKey:true添加到id字段中的模型定义文件中。您能否提供有关设置
Thingie
的代码?我认为拥有一个完整的示例代码有助于我们发现您的代码出了什么问题。
Thingie.update({details: "details about 0"}).then(function() {
    console.log('done');
});