【问题标题】:Associations with combination foreign key in Sails.js/WaterlineSails.js/Waterline 中与组合外键的关联
【发布时间】:2015-01-06 09:23:13
【问题描述】:

我需要一个名为“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'
    }
  }
};

【问题讨论】:

    标签: sails.js waterline


    【解决方案1】:

    我最近也有类似的问题。我的解决方案是在中间模型中创建不同的外键并将属性设置为“必需:假”。在您的示例中,PackageContent 表可能如下所示:

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

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

    【讨论】:

    • 这是一个好的开始,正如您所提到的,它需要一些额外的过滤。
    猜你喜欢
    • 1970-01-01
    • 2014-12-19
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    相关资源
    最近更新 更多