我需要一个名为'Package'的模型,它可以有一个或多个不同类型的子节点。例如,包可以包含指南,以及表单和其他内容类型(其中一些将在以后添加)。来自不同表的这些内容项中的每一个可以在多个包中。所以我有以下架构:
Package table
=============
id
name
....
PackageContent table
=============
id
packageId
contentType
contentId
Guide table
=============
id
name
...
Form table
=============
id
name
如何在sails.js的Package.js模型文件中为我的包定义'content'关联?我无法在sails.js或Waterline中找到有关组合外键的任何信息。我希望找到类似的内容:
// models/Package.js
module.exports = {
attributes = {
name: 'text',
....
content: {
through: 'PackageContent',
collection: contentType,
via: 'contentId'
}
}
};
答案 0 :(得分:1)
我最近遇到了类似的问题。我的解决方案是在中间模型中创建不同的外键,并将属性设置为'required:false'。在您的示例中,PackageContent表可能如下所示:
//PackageContent.js
module.exports={
attributes={
package:{
model:'package',
},
guide:{
model:'guide'
require:false
},
form:{
model:'form'
require:false
}
//other attributes...
}
}
为了避免重复的包+内容组合,您可能需要编写beforeValidate方法来检查重复。我不确定这是否是一个“好的设计”,但它解决了问题