Sails beta 0.10.0-rc7:填充 [A]->[B]->[C] 关联
Posted
技术标签:
【中文标题】Sails beta 0.10.0-rc7:填充 [A]->[B]->[C] 关联【英文标题】:Sails beta 0.10.0-rc7: populate [A]->[B]->[C] association 【发布时间】:2014-06-02 13:31:26 【问题描述】:我正在使用 Sails beta 0.10.0-rc7,但我遇到了模型关联问题。 我有以下方案:
文档 - 有 - 属性 -- 有 -- 类型
具有属性的文档,具有类型。 我正在尝试使用填充仅从一个查询中检索整个结构:
var query = model.findOne(id: id);
for (var i = 0; i < model.associations.length; i++)
query = query.populate(model.associations[i].alias);
使用该代码,我可以填充模型的第一级:
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: '....' ....
]
我怎样才能获得第二层的层次结构(类型)?
在此先感谢 :_)
【问题讨论】:
我认为这在另一个页面中得到了回答:***.com/questions/23446484/… 【参考方案1】:您可以使用内置的Blue Bird Promise 功能来实现。 (在 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);
);
【讨论】:
以上是关于Sails beta 0.10.0-rc7:填充 [A]->[B]->[C] 关联的主要内容,如果未能解决你的问题,请参考以下文章