Sails.js/Waterline中具有组合外键的关联



我需要一个名为"Package"的模型,它可以有一个或多个不同类型的子级。例如,一个包可以包含指南、表单和其他内容类型(其中一些将在稍后添加)。来自不同表的每个内容项都可以位于多个包中。所以我有以下模式:

Package table
=============
id
name
....
PackageContent table
=============
id
packageId
contentType
contentId
Guide table
=============
id
name
...
Form table
=============
id
name

如何在sails.js中的Package.js模型文件中定义包的"内容"关联?我在sails.js或Waterline中找不到任何关于组合外键的信息。我希望能找到一些类似的东西

// models/Package.js
module.exports = {
  attributes = {
    name: 'text',
    ....
    content: {
      through: 'PackageContent',
      collection: contentType,
      via: 'contentId'
    }
  }
};

我最近也遇到了类似的问题。我的解决方案是在中介模型中创建不同的外键,并将属性设置为"required:false"。在您的示例中,PackageContent表可能如下所示:

 //PackageContent.js
 module.exports={
    attributes={
        package:{
            model:'package',
        },
        guide:{
            model:'guide'
            require:false
        },
        form:{
            model:'form'
            require:false
        }
        //other attributes...
    }
}

为了避免重复的包+内容组合,您可能需要编写beforeValidate方法来检查重复。我不确定这是否是一个"好的设计",但它解决了的问题

相关内容

  • 没有找到相关文章

最新更新