如何克隆/复制实例项/行

agi*_*ms7 3 node.js sequelize.js sequelize-cli

我试图找到一种方法来按顺序复制/克隆实例,但没有成功。有没有内置函数可以做到这一点?我想要的是简单地复制数据库中的行,而新项应仅具有不同的ID。

Viv*_*shi 5

没有直接的功能,您可以做的是:

  1. 提取要克隆/复制的对象
  2. 从中删除主键
  3. 从中输入新内容

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


小智 5

如前所述,没有这样的直接函数(感谢 Vivek)

如果您发现它有用,请将以下代码放在您的模型类中:

async clone() {
    let cData = await THISISMYMODEL.findOne({
        where: { id: this.id},
        raw: true,
    });

    delete cData.id;
    return await THISISMYMODEL.create(cData);
}
Run Code Online (Sandbox Code Playgroud)

考虑到“THISISMYMODEL”应该是定义的模型类,“ id ”应该是使用的主键属性。

另外还要考虑到外键的使用(与其他模型的关系),因此会使用相同的键。否则你也应该克隆这些实例。


小智 0

在 Model.js 中编写一个 Model.create(data) 函数,并从循环内部调用该函数,根据需要多次调用,它将创建相同数据的副本。