использование Parse.Could.AfterSave при добавлении отношения к ParseObject

я просто испытываю parse sdk, и я хотел использовать облачный код для увеличения столбца Number всякий раз, когда отношения между двумя таблицами добавляются клиентом (например, пользователю нравится сообщение), в документации по анализу есть только коды для увеличения столбца на основе сохранение объекта, а не связи между таблицами с помощью 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);
}
});
});

как я могу использовать afterSave для изменения отношения между двумя таблицами? любая помощь будет оценена.


person Arash GM    schedule 30.08.2015    source источник


Ответы (2)


Вместо этого я предлагаю использовать перед сохранением. Вот пример кода, который я извлек из одного из своих проектов.

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();
    }
});
person Mark Pazon    schedule 30.08.2015
comment
спасибо за ваш ответ, я скоро рассмотрю ваш ответ глубже, но не могли бы вы сказать мне, почему перед сохранением? - person Arash GM; 30.08.2015
comment
Честно говоря, точно не помню. Я думаю, это потому, что в afterSave() он просто сообщает вам результирующий объект. В beforeSave() он сообщает вам, какие изменения необходимо внести. Например, код, который я только что привел, содержит проверку AddRelation, в которой явно говорится, что отношение добавляется к объекту. - person Mark Pazon; 30.08.2015
comment
я думаю, что недостаточно хорошо выразил свою проблему, и я думаю (если я правильно понял ваш код), ваше решение работает, когда отношение создано в коде, но у меня уже были эти отношения в моих таблицах, поэтому я попробовал другое решение, которое работает в моем случае просто подсчитывая отношения при добавлении одного, и я думаю, что это проще и чище. очень ценю вашу помощь. - person Arash GM; 30.08.2015

После некоторой борьбы с разбором документации! наконец, я решил свою проблему таким образом, и он отлично работает для подсчета отношений между двумя таблицами для конкретного объекта, надеюсь, это сэкономит другим время:

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();
  }); 
});
person Arash GM    schedule 30.08.2015