Zrobiłem kilka testów używając Pet
/User
example from the documentation z żaglami 0.11.
Writting to cyklem życia zwrotnego w modelu Pet
usuwa wszystkie users
powiązanych z pet
przed usuwania go.
// 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();
})
}
};
nie mogłem zrobić to w zwrotnego afterDestroy
cyklem ponieważ wiele-do-wielu właściwości usuniętych zapisów brakuje tam.
Linia wodna automatycznie usuwa zapisy tabeli połączeń.
Problem z tą funkcją polega na tym, że prawdopodobnie usunęłoby to zbyt wiele rzeczy, gdyby niektóre zwierzęta miały niektórych właścicieli. Idąc za przykładem dokumentacji, jeśli usunąć zwierzę Rainbow Dash, usuniesz użytkowników Mike, Cody i Gabe, a zwierzęta Pinkie Pie i Applejack byłoby sierot.
Jeśli zdefiniujesz relację wiele do wielu takich jak ta, ale wiesz, że zwierzęta nie mogą mieć żadnego właściciela wspólnego, to działa dobrze. W przeciwnym razie powinieneś dodać test, aby sprawdzić, czy nie uczynisz innego zwierzaka sierotą.