【发布时间】:2019-01-14 11:13:37
【问题描述】:
我试图找到一种在 Sequelize 中复制/克隆实例的方法,但没有成功。有没有办法使用内置功能或没有内置功能?我想要的是简单地复制数据库中的行,新项目应该只有一个不同的 id。
【问题讨论】:
-
你能不能只删除
find行中的id(我假设是PK 和A_I)和create数据?
标签: node.js sequelize.js sequelize-cli
我试图找到一种在 Sequelize 中复制/克隆实例的方法,但没有成功。有没有办法使用内置功能或没有内置功能?我想要的是简单地复制数据库中的行,新项目应该只有一个不同的 id。
【问题讨论】:
find 行中的id(我假设是PK 和A_I)和create 数据?
标签: node.js sequelize.js sequelize-cli
在 Model.js 中编写一个 Model.create(data) 函数,并从循环内部调用此函数,只要您需要,它将创建相同数据的副本。
【讨论】:
没有这样的直接功能,你可以做的是:
从中创建一个新条目
model.findOne({ //<---------- 1
where : { id : 1 } ,
raw : true })
.then(data => {
delete data.id; //<---------- 2
model.create(data); //<---------- 3
})
【讨论】:
您可能需要更新名称或其他字段以将其标识为副本,
const data = await model.findOne({ where: {id: 1}, raw: true, attributes: { exclude: ['id'] } });
data.name = data.name + '(copy)';
const newRecord = await model.create(data);
【讨论】:
如前所述,没有这样的直接功能(感谢 Vivek)
如果您觉得有用,请将以下代码放在您的模型类中:
async clone() {
let cData = await THISISMYMODEL.findOne({
where: { id: this.id},
raw: true,
});
delete cData.id;
return await THISISMYMODEL.create(data);
}
考虑到 "THISISMYMODEL" 应该是定义的模型类,而 "id" 应该是使用的主键属性。
还要考虑到外键的使用(与其他模型的关系),它会使用相同的键。否则你也应该克隆这些实例。
【讨论】: