使用 Parse.Could.AfterSave 将关系添加到 ParseObject

Posted

技术标签:

【中文标题】使用 Parse.Could.AfterSave 将关系添加到 ParseObject【英文标题】:using Parse.Could.AfterSave on adding a relation to a ParseObject 【发布时间】:2015-08-30 08:36:41 【问题描述】:

我只是在体验 parse sdk,我想在客户端添加的两个表之间的关系(例如用户喜欢一个帖子)时使用云代码来增加 Number 列,在解析文档中只有代码用于增加 a基于使用 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 更改两个表之间的关系?任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我建议改用 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();
    
);

【讨论】:

感谢您的回答,我会尽快深入了解您的回答,但您能告诉我为什么在 beforeSave 上吗? 说实话,我记不太清了。我认为这是因为在 afterSave() 它只是告诉你结果对象。在 beforeSave() 中,它告诉您要进行哪些更改。例如,我刚刚给出的代码带有对“AddRelation”的检查,它明确表示正在向对象添加关系。 我认为我表达的问题不够好,我认为(如果我的代码很好)当在代码中创建关系时,你的解决方案有效,但我已经在我的表上建立了这种关系,所以我已经尝试了另一种解决方案,在我的情况下,它只计算添加一个的关系,我认为它更容易和更清洁。非常感谢您的帮助。【参考方案2】:

经过一番努力解析文档!最后我以这种方式解决了我的问题,它可以很好地计算两个表之间特定对象的关系,希望这可以节省其他人一些时间:

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

【讨论】:

以上是关于使用 Parse.Could.AfterSave 将关系添加到 ParseObject的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份