我有班级"用户" Parse Dashboad的默认值。我还有班级"朋友",我在这里存储用户之间的友谊,如下所示: 有两列," toUser"和" fromUser",显示两个用户中谁发送了好友请求。这两列是用户类的指针(指针< _User>)。
我的概念是检索两个列表: 1.登录用户的好友列表 2.用户的用户列表(他们不是登录用户的朋友)
对此有什么合适的查询?
第一个逻辑上不应该扫描所有类用户,因为它可能会降低使用Ionic 3和Angular 4的应用程序的性能
谢谢
答案 0 :(得分:0)
您不需要其他类来完成所有操作所需的是默认用户类中的关系列
添加新朋友,您只需要以下代码
var friendtoadd
//this is the friend object from parse user class you want to add you can get it by anyway you want
var currentUser = Parse.User.current();
var relation = currentUser.relation("friends");
relation.add(friendtoadd)
currentUser.save();
要检索已登录用户的朋友数组,您可以使用以下代码
var currentUser = Parse.User.current();
var friendRelation = currentUser.relation('friends');
var env = this
friendRelation.query().find({
success: function(users) {
for (var i = 0; i< users.length; i++) {
var object = users[i];
env.friends.push(object)
console.log(env.friends)
}
}
});
//你应该定义friends = [];在课堂上
答案 1 :(得分:0)
如果我理解了您的问题,您希望找到朋友请求sent
或您received
的朋友。因为我没有看到你在哪里建立了用户和他的朋友之间的关系。
如果您想使用云代码执行此操作,那么这就是代码:
首先,我验证了正在保存的friendRequest
的参数:
Parse.Cloud.beforeSave("Friends", function(request, response){
var friendRequest = request.object;
if (!friendRequest.has("toUser") || !friendRequest.has("fromUser")) {
response.error("Invalid parameters");
return;
}
response.success();
});
然后我创建了两个云函数,一个用于检索sentRequests
:
Parse.Cloud.define("getSentRequests", function(request, response){
var query = new Parse.Query("Friends");
query.equalTo("fromUser", request.user);
if (!request.master) {
query.find({ sessionToken: request.user.getSessionToken() }).then(function(friends){
response.success(friends);
});
}else{
query.find({useMasterKey:true}).then(function(friends){
response.success(friends);
});
}
});
如果需要,您可以从登录用户或使用masterKey调用此函数,另一个查询用于recievedRequests
:
Parse.Cloud.define("getRecievedRequests", function(request, response){
var query = new Parse.Query("Friends");
query.equalTo("toUser", request.user);
if (!request.master) {
query.find({ sessionToken: request.user.getSessionToken() }).then(function(users){
response.success(users);
});
}else{
query.find({useMasterKey:true}).then(function(users){
response.success(users);
});
}
});