Ich habe einige Tests mit der Pet
/User
example from the documentation mit Segeln 0,11.
Writting dieses Lebenszyklus Callback im Pet
Modell löscht alle users
zu einem pet
zugeordnet vor sie zu löschen.
// 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();
})
}
};
konnte ich nicht tun es in der afterDestroy
Lifecycle-Rückruf, weil die many-to-many Eigenschaften der gelöschten Datensätze dort fehlen.
Waterline löscht die Datensätze der Junction-Tabelle automatisch.
Das Problem mit dieser Funktion ist, dass es wahrscheinlich zu viele Dinge löschen würde, wenn einige Haustiere einige Besitzer teilen. Nach dem Beispiel der Dokumentation, wenn Sie das Tier Rainbow Dash löschen, müssen Sie die Benutzer Mike, Cody und Gabe, und die Tiere Pinkie Pie und Applejack löschen würde Waisen sein.
Wenn Sie eine Viele-zu-Viele-Beziehung wie diese definieren, aber Sie wissen, dass die Haustiere keinen Eigentümer gemeinsam haben können, dann funktioniert es gut. Andernfalls sollten Sie einen Test hinzufügen, um zu überprüfen, ob Sie ein anderes Haustier nicht zu einem Waisenkind machen.