Sails.js/Waterline级联删除多对多关联

Sails.js/Waterline级联删除多对多关联,sails.js,waterline,cascading-deletes,Sails.js,Waterline,Cascading Deletes,如图所示,由于水线中不支持级联(特别是级联删除),因此可以通过使用afterDestroy(或afterUpdate进行软删除)生命周期回调并通过第二次查询删除关联记录,来解决一对多关联的问题。这可以通过ManyModel.destroy({oneModel:uu.pulk(destrozednemodels,“id”)})从afterDestroy中执行 对于多对多关系,我们如何做到这一点(记住连接表是在内部使用的,我们必须从中删除记录)?我使用with sails 0.11进行了一些测试 在

如图所示,由于水线中不支持级联(特别是级联删除),因此可以通过使用
afterDestroy
(或
afterUpdate
进行软删除)生命周期回调并通过第二次查询删除关联记录,来解决一对多关联的问题。这可以通过
ManyModel.destroy({oneModel:uu.pulk(destrozednemodels,“id”)})从
afterDestroy中执行


对于多对多关系,我们如何做到这一点(记住连接表是在内部使用的,我们必须从中删除记录)?

我使用with sails 0.11进行了一些测试

Pet
模型中写入此生命周期回调将删除与
Pet
关联的所有
用户
,然后再删除它

//models/Pet.js
module.exports={
属性:{
名称:'string',
颜色:'string',
业主:{
集合:“用户”,
via:‘宠物’
}
},
销毁前:功能(标准,cb){
//销毁与已删除宠物关联的任何用户
Pet.find(标准).populate('owners').exec(函数(err,pets){
如果(错误)返回cb(错误);
pets.forEach(函数(recordToDestroy){
User.destroy({id:\.pull(recordToDestroy.owner,'id')}).exec(函数(err){
console.log('与宠物'+recordToDestroy.name+'关联的用户已被删除');
});
});
cb();
})
}
};
我无法在
afterDestroy
生命周期回调中执行此操作,因为删除记录的多对多属性在那里丢失

Waterline正在自动删除连接表的记录

此功能的问题在于,如果某些宠物与某些主人共享,它可能会删除太多内容。按照文档的示例,如果您删除宠物彩虹短跑,您将删除用户Mike、Cody和Gabe,宠物小指派和Applejack将成为孤儿

如果你定义了这样一个多对多关系,但是你知道宠物不能有任何共同的主人,那么它工作得很好。否则,你应该添加一个测试,以检查你不会使另一个宠物成为孤儿