我有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 ??
答案 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,除非您真的,确实打算让其他控制器为您处理响应。