gpt4 book ai didi

javascript - Sequelize.js 插入一个具有一对多关系的模型

转载 作者:数据小太阳 更新时间:2023-10-29 05:45:11 27 4
gpt4 key购买 nike

我有两个具有一对多关系的 Sequelize 模型。我们称它们为所有者和属性(property)。

假设它们是使用 sails-hook-sequelize 本身定义的(简化)。

//Owner.js
module.exports = {
options: {
tableName: 'owner'
},
attributes: {
id: {
type: Sequelize.BIGINT,
allowNull: false,
primaryKey: true,
autoIncrement: true
},
name: {
type: Sequelize.STRING(255)
},
associations: function () {
Owner.hasMany(Property, {
foreignKey: {
name: 'owner_id'
}
});
}
}

//Property.js
module.exports = {
options: {
tableName: 'property'
},
attributes: {
id: {
type: Sequelize.BIGINT,
allowNull: false,
primaryKey: true,
autoIncrement: true
},
name: {
type: Sequelize.STRING(255)
}
}

现在假设我想在我的数据库中插入一个 Owner 记录并插入一些属性记录以与所有者相关联。我该怎么做呢?

我正在寻找类似的东西

Owner.create({name:'nice owner',
property: [{name:'nice property'},
{name:'ugly property'}]});

令人惊讶的是,我在 Sequelize 文档中找不到它。

最佳答案

您不能在创建所有者时关联属性(property)的现有记录,您必须在之后立即使用 promise 链进行关联。

Owner.create({name:'nice owner'}).then(function(owner){ 
owner.setProperties([{name:'nice property'}, {name:'ugly property'}]).then(/*...*/);
});

为避免这些关联出现任何问题(所有者创建但某些关联失败),最好使用事务。

sequelize.transaction(function(t) {
return Owner.create({name:'nice owner'}, {transaction: t}).then(function(owner){
return owner.setProperties([{name:'nice property'}, {name:'ugly property'}], {transaction : t});
});
});

但是,如果您想创建与新属性关联的新所有者,您可以执行以下操作

Owner.create({
name: 'nice owner',
property: [
{ name: 'nice property'},
{ name: 'ugly property'}
]
},{
include: [ Property]
});

参见 http://docs.sequelizejs.com/en/latest/docs/associations/#creating-with-associations

关于javascript - Sequelize.js 插入一个具有一对多关系的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37813467/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com