NodeJS 如何在序列化中克隆/复制示例项/行

9w11ddsr  于 2023-06-29  发布在  Node.js
关注(0)|答案(4)|浏览(118)

我试图在Sequelize中找到一种复制/克隆示例的方法,但没有成功。有没有什么方法可以使用内置函数或不使用内置函数?我想要的是简单地复制数据库中的行,新项应该只有一个不同的id。

rwqw0loc

rwqw0loc1#

没有这样的直接功能,你可以做的是:
1.获取要克隆/复制的对象
1.从中删除主键
1.从中创建一个新条目

model.findOne({ //<---------- 1
                where : { id : 1 } , 
                raw : true })
.then(data => {
    delete data.id; //<---------- 2
    model.create(data); //<---------- 3
})
kiz8lqtg

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”应该是使用的主键属性。
同时考虑到外键的使用(与其他模型的关系),它将使用相同的键。否则,您也应该克隆这些示例。

bwntbbo3

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);
kokeuurv

kokeuurv4#

在Model.js中编写一个Model.create(data)函数,并在循环中调用该函数,因为它会多次创建相同数据的副本。

相关问题