我正在尝试使用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
答案 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
});