Android 在向ParseObject添加关系时使用Parse.can.AfterSave
我刚刚体验了parse sdk,我想使用云代码在客户端添加的两个表之间的关系(例如用户喜欢帖子)时增加一个数字列,在解析文档中,只有基于保存对象而不是使用afterSave的表之间的关系来增加列的代码:Android 在向ParseObject添加关系时使用Parse.can.AfterSave,android,parse-platform,parse-cloud-code,parse-android-sdk,after-save,Android,Parse Platform,Parse Cloud Code,Parse Android Sdk,After Save,我刚刚体验了parse sdk,我想使用云代码在客户端添加的两个表之间的关系(例如用户喜欢帖子)时增加一个数字列,在解析文档中,只有基于保存对象而不是使用afterSave的表之间的关系来增加列的代码: Parse.Cloud.afterSave("Comment", function(request) { query = new Parse.Query("Post"); query.get(request.object.get("post").id, { success: function(p
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更改两个表之间的关系?任何帮助都将不胜感激。我建议改用beforeSave。下面是我从一个项目中提取的示例代码
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();
}
});
经过一些与解析文档的斗争!最后,我用这种方法解决了我的问题,它可以很好地计算特定对象的两个表之间的关系,希望这可以节省其他人一些时间:
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();
});
});
谢谢你的回答,我很快会更深入地看你的答案,但是你能告诉我为什么在保存之前?老实说,我记不清了。我认为这是因为在afterSave()中,它只是告诉您结果对象。在beforeSave()中,它告诉您要进行哪些更改。例如,我刚才给出的代码带有一个“AddRelation”的检查,它明确表示一个关系正在被添加到对象中。我认为我表达的问题不够好,我认为(如果我理解您的代码)在代码中创建关系时,您的解决方案是有效的,但我的表中已经有了这种关系,所以我尝试了另一种解决方案,在我的情况下,只需在添加一个关系时计算关系,我认为这更简单、更清晰。非常感谢你的帮助。