I have a one to many relation between Teacher(One) and Children(Many).
If I do:
Teacher.destroy(teacherId).exec(function(err){});
The children are not automatically removed.
Is it a bug or should I delete them manually? If that's not a bug, what is the explanation for not deleting children?
Waterline currently doesn't support cascading deletes. It may be a configuration option in future versions, but it will probably never be the default. In most production-ready apps you probably should be doing soft-deletes anyway. In either case, you can get what you want by using the afterDestroy
lifecycle callback.
In api/models/Teacher.js
, something like:
module.exports = {
attributes: {
// attributes here
},
afterDestroy: function(destroyedRecords, cb) {
// Destroy any child whose teacher has an ID of one of the
// deleted teacher models
Child.destroy({teacher: _.pluck(destroyedRecords, 'id')}).exec(cb);
}
}
You could do something similar with soft-deletes using the afterUpdate
method.
来源:https://stackoverflow.com/questions/23483739/sails-js-waterline-one-to-many-model-association-what-should-happen-when-dele