我需要一个名为"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方法来检查重复。我不确定这是否是一个"好的设计",但它解决了的问题