Parse Cloud Right Query to retrieve Friendslist and not (like Instagram)

最后都变了- 提交于 2019-12-13 03:08:53

问题


I have the class "Users" the default of Parse Dashboad. I have also the class "Friends", where I store the friendships between users like this: There are two columns, "toUser" and "fromUser", which are showing who of the two users sent the friend request. These two columns are Pointers(Pointer<_User>) to the Users Class.

My concept is to retrieve two lists: 1. Friendlist for the logged in user 2. Userlist of users (who are not friends with the logged in user)

What would be the appropriate queries for that?

The first one logically should not scan all the class Users because it may slow down the perfomance of the app which is using Ionic 3 and Angular 4

Thank you


回答1:


you don't need another class to do so all you need is a relation column in the default user class

to add new friend you just need the following code

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();

to retrieve array of friends of logged in user you can use the following code

  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)
        }


      } 
    }); 

// you should define friends = []; in the class




回答2:


if I understood your question right you want to find the friend requests you sent, or the ones you received. because I don't see where you made a relation between the user and his friends. this is the code if you want to do this using cloud code:

First I validated the parameters of the friendRequest being saved :

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();
});

then I created two cloud functions, one for retrieving the 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);
    });
  }
});

and you can call this either from a logged in user or using the masterKey if you want, and the other query is for the 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);
    });
  }
});


来源:https://stackoverflow.com/questions/46731044/parse-cloud-right-query-to-retrieve-friendslist-and-not-like-instagram

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!