如該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
生命週期回調。
水線正在自動刪除聯結表的記錄。
此功能的問題是,如果有些寵物共享某些所有者,它可能會刪除太多東西。繼文檔的例子,如果你刪除寵物彩虹短跑,您將刪除用戶邁克,科迪和加布和寵物小指餡餅和蘋果白蘭地是孤兒。
如果你定義了一個像這樣的多對多關係,但你知道寵物不能擁有任何共同的擁有者,那麼它工作得很好。否則,你應該添加一個測試來檢查你是否不會讓另一個寵物成爲孤兒。