如何自动填充url / model / <id> / association的sails蓝图的嵌套关联

时间:2016-12-13 10:42:04

标签: sails.js waterline

我有两个模型用户和聊天,有多对多关联。

user.js的

module.exports = {

  attributes: {
    name: {
         type       : 'string'
        ,required   : true
    },

    email:{
         type   : 'string'
        ,email  : true
        ,required: true
        ,unique : true
    },
    enpassword : {
        type: 'string'
    },

    online : {
        type: 'boolean',
        defaultsTo: false
    },

    socketid: {
        type: 'string'
    },
    chats : {
      collection: 'chat',
      via: 'users',
      dominant: true
    }

};

Chat.js

module.exports = {
  attributes: {
    messages : {
      collection: 'message',
      via       : 'chat',
      dominant  : true
    },
    users : {
      collection: 'user',
      via       : 'chats'
    },
  }
};

当我调用sails blueprint / user / 1 / chats时,我会收到聊天列表,但不会填充每个聊天的用户关联。

如何从Sails查询中实现这一目标?

1 个答案:

答案 0 :(得分:2)

好问题。这是一个非常简单的方法。

首先,需要以下模块。

var nestedPop = require('nested-pop');

接下来,运行您的查询。

getPopulatedUsers = function(req, res) {
  User.find()
  .populate('chats')
  .then(function(users) {
    return nestedPop(users, {
      chats: [
        'messages',
        'users' // I actually wouldn't recommend populating this since you already have the users
      ]
    }).then(function(users) {
      console.log(users);
      res.json(users);
    });
  });
}

有关此问题的更多文档可在以下链接中找到。 https://www.npmjs.com/package/nested-pop