我在 parse.com 上遇到多对多关系问题。
首先,我有两个类(Groups 和 Users)和一个类(UserInGroup)来实现 m-to-m 关系。
类结构:
群组: objectId(string) -- GroupName(string) -- ...
用户: objectId(string) -- 用户名(string) -- ...
组内用户: objectId(string) -- 组(指针<组>) -- 用户(指针<用户>)
如何获取特定组中所有用户的用户名(我知道该组的 objectId)。
我试过了
function getUserNameOfGroup(GroupID){
var UserInGroup = Parse.Object.extend("UserInGroup");
var query = new Parse.Query(UserInGroup);
var usersArray = [];
var Groups = Parse.Object.extend("Groups");
var collectionQuery = new Parse.Query(Groups);
collectionQuery.get(GroupID, {
success: function(group) {
query.equalTo("Group", group);
var usersArray = [];
query.find({
success: function(results) {
for (var i = 0; i < results.length; i++) {
var object = results[i];
var user = object.get("User");
user.fetch({
success: function(tempUser) {
usersArray.push(user.get("UserName"));
}
}).done(function() {
if(results.length == usersArray.length){
//do something with the array
}
});
}
},
error: function(error) {
alert("Error: " + error.code + " " + error.message);
}
});
},
error: function(object, error) {
alert("Error: " + error.code + " " + error.message);
}
});
}
为了测试我放了
if(results.length == usersArray.length){
for (var i = 0; i < usersArray.length; i++) {
alert(usersArray[i]);
}
}
在完成部分。 usersArray 的第一个条目始终是“undefinde”。
我做错了什么?或者更确切地说,有没有一种更简单、更美观、更快捷的方式来获取数组呢?我确信有更好的解决方案;)。
感谢您的帮助。
最佳答案
无需对 UserInGroup 的 User 属性进行额外的查询。可以使用 include() 急切地获取这些内容,如下所示:
// return a promise that is fulfilled with an array of users belonging to
// the Group with id groupId
function usersInGroup(groupId) {
var groupQuery = new Parse.Query("Groups");
return groupQuery.get(groupId).then(function(group) {
var userInGroupQuery = new Parse.Query("UserInGroup");
userInGroupQuery.equalTo("Group", group);
// eagerly fetch the related user...
userInGroupQuery.include("User");
return userInGroupQuery.find();
}).then(function(results) {
var users = [];
for (var i = 0; i < results.length; i++) {
var object = results[i];
users.push(object.get("User"));
}
return users;
});
}
这样调用它:
usersInGroup(someGroupId).then(function(users) {
for (var i = 0; i < users.length; i++) {
var user = users[i];
console.log(user.getUserName()); // or get("username")
}
}, function(error) {
console.log(error);
});
关于javascript - parse.com 使用 Javascript 多对多获取指针 ID 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30196653/