Sails beta 0.10.0-rc7:填充[A] - > [B] - > [C]关联

时间:2014-06-02 13:31:26

标签: model associations sails.js populate

我使用的是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: '....' .... }

            }
        ]

    }

我怎样才能获得第二级层次结构(类型)?

提前致谢:_)

1 个答案:

答案 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);
    }
  });