Arash GM
Arash GM

Reputation: 10395

using Parse.Could.AfterSave on adding a relation to a ParseObject

i'm just experiencing parse sdk and i wanted to use cloud code to increment a Number column whenever a relationship between two tables added by client(for example user likes a post) , in parse documentation there is just codes for incrementing a column based on saving an object and not a relation between tables using afterSave :

Parse.Cloud.afterSave("Comment", function(request) {
query = new Parse.Query("Post");
query.get(request.object.get("post").id, {
success: function(post) {
  post.increment("comments");
  post.save();
},
error: function(error) {
  console.error("Got an error " + error.code + " : " + error.message);
}
});
});

how can i use afterSave on changing relation between two tables? any help would be appreciated.

Upvotes: 1

Views: 548

Answers (2)

Arash GM
Arash GM

Reputation: 10395

After some struggling with parse Documentation! finally i've solved my issue this way and it works just fine for counting relations between two tables for specific object, hope this saves others some time :

Parse.Cloud.afterSave("SavedObject", function(request) {
  var likeQuery = request.object.relation("likers").query();
  likeQuery.count()(function(likersCount){

      request.object.set("likersCountColumn",likersCount);
      console.log("Likers Count Is : "+ likersCount);
      request.object.save();
  }); 
});

Upvotes: 1

Mark Pazon
Mark Pazon

Reputation: 6205

I suggest using beforeSave instead. Here is an example code I extracted from one of my projects.

Parse.Cloud.beforeSave(ClassConstants.Item.TYPE, function(request, response) {

    if(!request.object.isNew()) {
        // Retrieve the relationship information in json string format. 
        // RELATION_QUEUE here is simply a string "queue"
        var relQueueJsonStr = JSON.stringify(request.object.op(ClassConstants.Item.RELATION_QUEUE));

        if( relQueue !== undefined ) {
            var relQueue = JSON.parse(relQueueJsonStr);
            // Retrieve the operation being performed to this existing object.
            // The value will be "AddRelation" if a the relation "queue" is  
            // being added to this object
            var operation = relQueue.__op;
            if (operation == "AddRelation"){
                console.log("Relation queue is being added");
               // Do what you like here. In your case increment something

                response.success();
            } else {
            // Relation is being removed
                console.log("Relation queue is being removed");
                response.success();
            }
        } else {
            console.log("No queue relation.");
            response.success();
        }
    } else {
        response.success();
    }
});

Upvotes: 1

Related Questions