如该stackoverflow answer所示,具有级联(级联删除尤其是)在水线不支持存在用于一个一对多协会一种解决方法通过使用afterDestroy
(或afterUpdate
进行软删除)生命周期回调并使用第二个查询删除相关记录。这可以通过afterDestroy
内的来实现。Sails.js /水线级联删除了许多一对多关联
我们如何做到这一点为多对多关系(记住一个联结表在内部使用,我们必须从它删除记录)?
如该stackoverflow answer所示,具有级联(级联删除尤其是)在水线不支持存在用于一个一对多协会一种解决方法通过使用afterDestroy
(或afterUpdate
进行软删除)生命周期回调并使用第二个查询删除相关记录。这可以通过afterDestroy
内的来实现。Sails.js /水线级联删除了许多一对多关联
我们如何做到这一点为多对多关系(记住一个联结表在内部使用,我们必须从它删除记录)?
我做了一些测试,使用Pet
/User
example from the documentation,风速为0.11。
书面方式在Pet
模型这个生命周期回调删除关联到pet
所有users
之前将其删除。
// models/Pet.js
module.exports = {
attributes: {
name:'string',
color:'string',
owners: {
collection: 'user',
via: 'pets'
}
},
beforeDestroy: function(criteria, cb) {
// Destroy any user associated to a deleted pet
Pet.find(criteria).populate('owners').exec(function (err, pets){
if (err) return cb(err);
pets.forEach(function(recordToDestroy) {
User.destroy({id: _.pluck(recordToDestroy.owners, 'id')}).exec(function(err) {
console.log('The users associated to the pet ' + recordToDestroy.name + ' have been deleted');
});
});
cb();
})
}
};
因为删除的记录多到许多属性是缺少有我不能这样做,在afterDestroy
生命周期回调。
水线正在自动删除联结表的记录。
此功能的问题是,如果有些宠物共享某些所有者,它可能会删除太多东西。继文档的例子,如果你删除宠物彩虹短跑,您将删除用户迈克,科迪和加布和宠物小指馅饼和苹果白兰地是孤儿。
如果你定义了一个像这样的多对多关系,但你知道宠物不能拥有任何共同的拥有者,那么它工作得很好。否则,你应该添加一个测试来检查你是否不会让另一个宠物成为孤儿。