sequelize.js深度保存模型实例

时间:2018-02-23 10:09:12

标签: node.js sequelize.js

使用sequelize,我试图更新嵌套属性但没有成功:

const Product = sequelize.define('product', {
    title: { type: Sequelize.STRING },
    color: { type: Sequelize.STRING },
});

const User = sequelize.define('user', {
    name: { type: Sequelize.STRING },
});

Product.belongsTo(User);
User.hasMany(Product);

// create some data
await User.create({
    name: 'foo',
    products:[
        { title: 'prod1', color:'blue' },
        { title: 'prod2', color:'red' },
    ]
},
{ include: [ Product ] }
);

// query data
var data = await sequelize.models.user.findOne({
    where: { name:'foo' },
    include: [ Product ]
});

// update data
data.products[0].color = 'green';
await data.save();

// result
var data = await sequelize.models.user.findAll({
    include: [ Product ]
});

此处,产品颜色仍为蓝色。 我想知道出了什么问题

EDIT1: 我需要从模型的“根”更新,因为数据更新来自JSON结构,包含模型的数据是此结构的一部分

1 个答案:

答案 0 :(得分:3)

您需要在update型号的实例上调用product

await data.products[0].update({
  color: 'some other color'
});

现在,您只是更改findOne返回的对象的值。当您致电save时,模型实例不知道您更改了任何值。