我试图在Sequelize中找到一种复制/克隆示例的方法,但没有成功。有没有什么方法可以使用内置函数或不使用内置函数?我想要的是简单地复制数据库中的行,新项应该只有一个不同的id。
rwqw0loc1#
没有这样的直接功能,你可以做的是:1.获取要克隆/复制的对象1.从中删除主键1.从中创建一个新条目
model.findOne({ //<---------- 1 where : { id : 1 } , raw : true }) .then(data => { delete data.id; //<---------- 2 model.create(data); //<---------- 3 })
kiz8lqtg2#
正如所说,没有这样的直接功能(感谢Vivek)如果你觉得有用的话,把下面的代码放在你的模型类上:
async clone() { let cData = await THISISMYMODEL.findOne({ where: { id: this.id}, raw: true, }); delete cData.id; return await THISISMYMODEL.create(cData); }
请注意,“THISISMYMODEL” 应该是定义的模型类,而“id”应该是使用的主键属性。同时考虑到外键的使用(与其他模型的关系),它将使用相同的键。否则,您也应该克隆这些示例。
bwntbbo33#
您可能需要更新名称或其他字段以将其标识为副本,
const data = await model.findOne({ where: {id: 1}, raw: true, attributes: { exclude: ['id'] } }); data.name = data.name + '(copy)'; const newRecord = await model.create(data);
kokeuurv4#
在Model.js中编写一个Model.create(data)函数,并在循环中调用该函数,因为它会多次创建相同数据的副本。
4条答案
按热度按时间rwqw0loc1#
没有这样的直接功能,你可以做的是:
1.获取要克隆/复制的对象
1.从中删除主键
1.从中创建一个新条目
kiz8lqtg2#
正如所说,没有这样的直接功能(感谢Vivek)
如果你觉得有用的话,把下面的代码放在你的模型类上:
请注意,“THISISMYMODEL” 应该是定义的模型类,而“id”应该是使用的主键属性。
同时考虑到外键的使用(与其他模型的关系),它将使用相同的键。否则,您也应该克隆这些示例。
bwntbbo33#
您可能需要更新名称或其他字段以将其标识为副本,
kokeuurv4#
在Model.js中编写一个Model.create(data)函数,并在循环中调用该函数,因为它会多次创建相同数据的副本。