我正在开发一个包含多个(> 2)表格的sails应用程序,我需要在填充方法的帮助下加入这些表格 e.g。
Category.js模型
attributes: {
CategoryID:{
type:"integer",
required:true,
primaryKey:true,
autoIncrement:true
},
SubCategories:{ //REFERING TO SUB-CATEGORY TABLE
collection:'SubCategory',
via:'CategoryID'
},
CategoryName:{
type:"string",
required:true,
maxLength:50
}
}
这是 SubCategory.js模型。
attributes: {
id:{
type:'integer',
required:true,
primaryKey:true,
autoIncrement:true,
maxLength:10,
columnName:'SubCategoryID'
},
CategoryID:{
model:'Category' //REFERING TO CATEGORY TABLE
},
ProductsOfCategory:{ //REFERING TO PRODUCT TABLE
collection:'Product',
via:'SubCategoryID'
},
SubCategory:{
type:"string",
required:true,
maxLength:50
}
}
和 Product.js模型
attributes: {
id: {
type: 'integer',
primaryKey: true,
autoIncrement: true,
maxLength: 10,
columnName:'ProductID'
},
SubCategoryID: {
model:'SubCategory'
},
ProductDetails:{
collection:'ProductDetails',
via:'ProductID'
},
ProductName: {
type: "string",
required: true,
maxLength: 50
}
}
和 ProductDeatils.js模型
attributes: {
id: {
type: 'integer',
primaryKey: true,
autoIncrement: true,
maxLength: 10,
columnName:'ProductDetailID'
},
ProductID:{
model:'Product'
},
Size:{
type:"string",
required:true,
maxLength:10
},
Color:{
type:"string",
required:true,
maxLength:10
}
}
在填充时,我可以填充每个类别的类别和子类别。
Category.find()
.populate('SubCategories')
.exec(function(err, categories){
if (err) {
console.log(err);
return res.json(err);
}
console.log(categories);
res.json(categories);
})
如何一次性填充上面的所有表格,以便在最终查询后我们在一个json中获得所有上述详细信息。
我们加入了以上所有表格
这是包含所有子类别的类别,包含所有产品的子类别和所有产品在一个json中都有产品详细信息
答案 0 :(得分:1)
你问了一个很好的问题。将嵌套填充功能纳入风帆,几十个问题请求和PR等等,一直有大量兴趣。
在这里看看一些历史:
[FEATURE REQUEST] Recursively populate #308 - 我迟到了,在2014年10月29日提出请求,就像你在历史上看到的一样。
据我所知,大多数会话最终融合在这里(在Sails用户请求该功能几年后):
Deep populate #1052(问题仍然是开放撰写 2016年1月14日)
我们不清楚该问题的状态。这两个链接的历史确实提出了其他人使用的替代解决方法。
我的预感是不支持递归填充。
使用水线模型与SailsJS关联时所做的是使用类似async.js的包 - 使用类似瀑布的方式以编程方式显式填充子关系。您可以将此操作与覆盖您调用的模型的默认toJSON()组合在一起,以将其关系(以编程方式填充)添加到JSON响应中。你也可以选择使用内置的promises来实现同样的目标。
发现这个(日期为2014年)SOF Question,提供了更多信息。
有人,如果我在最近的Sails或Waterline版本中错过了这个功能,那么请在这里纠正我 - 无法在发布说明中找到任何项目的任何内容,说这是支持的。