我使用的是Sails beta 0.10.0-rc7,我遇到了模型关联问题。 我有以下方案:
文档 - 有 - 属性 - 有 - 输入
具有属性的文档,具有Type。 我尝试使用populate:
从一个查询中检索整个结构 var query = model.findOne({id: id});
for (var i = 0; i < model.associations.length; i++) {
query = query.populate(model.associations[i].alias);
}
使用该代码,我可以获得填充模型的第1级:
res = {
id: 1,
name: '....',
desc: '....',
// This is populated
attributes: [{
id: 1,
name: '...',
// THIS Should be populated also!
type: 1
// Should be
// type: { id: 1, name: '....' .... }
}
]
}
我怎样才能获得第二级层次结构(类型)?
提前致谢:_)
答案 0 :(得分:0)
您可以使用内置的Blue Bird承诺功能来制作它。 (致力于Sails@v0.10.5)
UserMenuSection.find({
userRole: userRole,
type: type
})
.sort('orderId asc')
.populate('items', {
sort: 'orderId asc'
})
.then(function(values) {
var ids = [];
_.forEach(values, function(section) {
_.forEach(section.items, function(item) {
ids.push(item.id);
});
});
var subItems = UserMenuItem.find({
Parent: ids
}).then(function(subItems) {
return subItems;
});
return [values, subItems];
})
.spread(function(values, subItems) {
var subItems = _.groupBy(_.sortBy(subItems, 'orderId'), 'Parent');
var userMenu = _.map(values, function(section) {
_.map(section.items, function(item) {
item.subItems = subItems[item.id];
return item;
});
return section;
});
res.json(userMenu);
})
.catch(function(err) {
if (err) {
var errMsg = "some error messages...";
sails.log.error(errMsg);
return res.serverError(errMsg);
}
});