如何从多个模型返回Sails.js中的JavaScript表

时间:2014-03-24 18:39:04

标签: javascript sails.js waterline

我有2个型号,User和Friend。在朋友我有2列(UserId1,UserId2) 我想在Friend行中找到指定UserId1的行,然后从包含这些行的表中找到我想要返回带有Id = UserId2

的用户的表
index: function(req, res, next) {

  Friend.find({UserId1 : req.session.User.id}, function foundUsers(err, friends) {
    if (err) return next(err);
    // pass the array down to the /views/index.ejs page
    res.view({
      friends: friends
    });
  });
}

上面的代码返回表格中的Friends(UserId1,UserId2),其中指定了UserId1,但如何返回表格中的用户(来自模型用户),其中Id = UserId2 ??

1 个答案:

答案 0 :(得分:2)

因此,听起来您使用Friend模型作为表示两个用户之间友谊的联接表。您当前在代码中拥有的查询会获取连接表中的所有记录,其中UserId1是您登录用户的ID,并且对于每个记录,您希望获得完整的User id与UserId2列匹配的用户的对象。如果是这种情况,完整的代码可能是:

index: function(req, res) {

    Friend.find({UserId1 : req.session.User.id})
    .exec(function foundUsers(err, friend_records) {

        if (err) return res.serverError(err);

        // Get an array of all the UserId2 values, using sails.util.pluck,
        // which is essentially Lodash's _.pluck
        var friend_ids = sails.util.pluck(friend_records, 'id');

        // Get the User records for those users.  Using an array
        // in the criteria makes Waterline do an "in" query
        User.find({id: friend_ids}).exec(function(err, friends) {

            // pass the array down to the /views/index.ejs page
            res.view({
                friends: friends
            });

        });

    });

}

几点说明:

  • 您几乎不应在控制器代码中使用next,尤其是在错误处理方面。如果出现错误,请使用响应进行处理。保存next policies,除非您真的,确实打算让其他控制器为您处理响应。
  • Sails v0.10(目前处于测试阶段)包括support for associations,它将为您处理联接表。