0

我有 2 个模型,用户和朋友。在朋友中,我有 2 列(UserId1,UserId2)我想在指定 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
    });
  });
}

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

4

1 回答 1

2

因此,听起来您将Friend模型用作代表两个用户之间友谊的连接表。您当前在代码中的查询从连接表中获取所有记录,其中UserId1登录用户的 id 是,并且对于这些记录中的每一个,您都希望获取id 与该列User匹配的用户的完整对象。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否则请保存策略。
  • Sails v0.10(目前处于测试阶段)包括关联的支持,它将为您处理连接表。
于 2014-03-24T23:11:08.970 回答