sails.js + waterline一对多模型关联,删除Many时会发生什么?

use*_*106 6 orm node.js sails.js waterline

我在教师(一)和儿童(很多)之间有一对多的关系.

如果我做:

Teacher.destroy(teacherId).exec(function(err){});
Run Code Online (Sandbox Code Playgroud)

孩子们不会被自动删除.

这是一个错误还是我应该手动删除它们?如果这不是一个错误,那么不删除孩子的解释是什么?

sgr*_*454 17

Waterline目前不支持级联删除.它可能是未来版本中的配置选项,但它可能永远不会是默认配置.在大多数生产就绪的应用程序中,您可能应该进行软删除.在任何一种情况下,您都可以通过使用afterDestroy生命周期回调来获得所需的内容.

api/models/Teacher.js,像:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以使用该afterUpdate方法执行类似于软删除的操作.

  • "在大多数适合生产的应用程序中,你可能应该进行软删除." 请你进一步解释这个评论.如果您有一个完全支持级联删除的成熟(测试)ORM解决方案(例如Hibernate),这是一个预期的选项.当然,应该注意配置设置 - 这是集成测试的目的.如果您确实需要保留历史记录等,那么软删除可能是合适的,但这与环境(PRD等)没什么关系,更多与业务/技术要求有关. (2认同)