如果更新了Upsert,则如何撤消更新;如果使用Sequelize插入了Upsert,则如何删除

时间:2019-08-08 07:44:50

标签: node.js sequelize.js

我正在尝试使用Sequelize在我的expressJs应用程序的2个表中添加用于创建数据的功能。

控制器:
Campaign.upsert({
    institution_id : institution_id,
    description : campaign_about
}).then(value => {
    InstitutionDetail.create({
        institution_id : institution_id,
        support_description : support_description,
        img_homepage : img_homepage
    }).then(value1 => {
        var campaign = {};
        var obj = {campaign};

        obj.campaign = value;
        obj.institution_detail = support_description;
        obj.institution_img_home = img_homepage;

        res.json({
            'data': obj
        })
    }).catch(reason => {
        if(value == true){
            //if campaign created
            Campaign.destroy({force: true, where:{institution_id:institution_id}});
        } else {
            //if campaign updated
            //how to undo the updated, so I can have the previous data back
            Campaign.destroy({where:{institution_id:institution_id}});
        }
        News.destroy({where:{id:value2.id}});
        Testimony.destroy({where:{id:value1.id}});
        responseUtil.fail(res, reason)
    })
}).catch(reason => responseUtil.fail(res, reason))

如果 InstitutionDetail 中的create失败了,我想销毁 Campaign 的创建数据,或者如果广告系列执行update

如果 Campaign destroy,我已经使用捕获中的create成功删除了 Campaign 数据,但是我不知道广告活动update时该怎么办。

我尝试在模型中使用paranoid

timestamps: true,
paranoid: true

并在模型中添加列deletedAt

但是它仅将deletedAt设置为当前时间,如果 Campaign update

,则不会获取数据

1 个答案:

答案 0 :(得分:2)

  

根据 doc

     

返回一个布尔值,指示该行是已创建还是已更新。   对于MySQL / MariaDB,插入时返回true,当插入时返回false   更新。对于具有(options.returning = true)的Postgres / MSSQL,它将返回   记录并创建带有签名的布尔值。

因此,请尝试:

Campaign.upsert({
    institution_id : institution_id,
    description : campaign_about
}).then(value => {
    console.log(value); // <--- This should return true/false
});


Campaign.upsert({
    institution_id : institution_id,
    description : campaign_about
},{ returning : true }) // <----- with (options.returning=true)
.then(value => {
    console.log(value); // <--- This will return model + created : true/false
});