Sails.js/Waterline级联删除多对多关联

 mmmm的海角_771 发布于 2022-12-04 02:01
  • yaf
  • 如堆栈溢出答案所示,在Waterline中不支持级联(特别是级联删除),通过使用(或用于软删除)生命周期回调并删除相关记录,可以解决一对多关联问题.第二个查询.这可以通过内部实现.afterDestroyafterUpdateManyModel.destroy({ oneModel: _.pluck(destroyedOneModels, "id") })afterDestroy

    我们如何为多对多关系做到这一点(考虑到内部使用联结表,我们必须从中删除记录)?

    1 个回答
    • 我使用sails0.11的文档中的Pet/Userexample做了一些测试. 在Pet模型users中写入此生命周期回调会在删除pet之前删除与a关联的所有内容. //models/Pet.js module.exports={ attributes:{ name:string, color:string, owners:{ collection:user, via:pets } }, beforeDestroy:function(criteria,cb){ //Destroyanyuserassociatedtoadeletedpet Pet.find(criteria).populate(owners).exec(function(err,pets){ if(err)returncb(err); pets.forEach(function(recordToDestroy){ User.destroy({id:_.pluck(recordToDestroy.owners,id)}).exec(function(err){ console.log(Theusersassociatedtothepet+recordToDestroy.name+havebeendeleted); }); }); cb(); }) } }; 我无法在afterDestroy生命周期回调中执行此操作,因为删除的记录的多对多属性在那里丢失. Waterline自动删除联结表的记录. 这个功能的问题在于,如果某些宠物共享一些所有者,它可能会删除太多东西.按照文档示例,如果您删除宠物RainbowDash,您将删除用户Mike,Cody和Gabe,并且宠物PinkiePie和Applejack将成为孤儿. 如果您定义像这样的多对多关系,但您知道宠物不能拥有任何所有者,那么它可以正常工作.否则,您应该添加一项测试,以检查您是否不会让另一只宠物成为孤儿.
      2022-12-11 01:53 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    热门标签
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有