解析云更新唯一列 [英] Parse Cloud update unique column

查看:75
本文介绍了解析云更新唯一列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已使用此代码通过Parse Cloud保存数据,我有一个唯一的列"number_plate",我遇到了一个问题,那就是当我尝试更新对象时无法做到这一点.

I have used this code to save the data using Parse Cloud, I have a unique column "number_plate" I am facing a problem and that is when I try to update the object I'm unable to do so.

var Car = Parse.Object.extend("Car");

// Check if number plate is set, and enforce uniqueness based on the number plate column.
Parse.Cloud.beforeSave("Car", function(request, response) {
  if (!request.object.get("number_plate")) {
    response.error('The number plate was not provided.');
  } else {
    var query = new Parse.Query(Car);
    query.equalTo("number_plate", request.object.get("number_plate"));
    query.first({
      success: function(object) {
        if (object) {
          response.error("A Car with this number plate already exists.");
        } else {
          response.success();
        }
      },
      error: function(error) {
        response.error("Could not validate uniqueness for this Car because the number plate is repeated.");
      }
    });
  }
});

**

更新:我根据给定的答案使用了新代码:

UPDATE: The new code I used according to the given answer:

**

Parse.Cloud.beforeSave("Car", function(request, response) {
    if (!request.object.isNew()) {
      // Let existing object updates go through
      response.success();
    }
    var query = new Parse.Query("Car");
    // Add query filters to check for uniqueness
    query.equalTo("number_plate", request.object.get("number_plate"));
    query.first().then(function(existingObject) {
      if (existingObject) {
        // Update existing object. here you can do all the object updates you want 
        if (request.object.get("car_model") != undefined){
          object.set("car_model",request.object.get("car_model"));
        }

        if (request.object.get("car_name") != undefined){
          object.set("car_name",request.object.get("car_name"));
        }
        if (request.object.get("year") != undefined){
          object.set("year",request.object.get("year"));
        }
        return existingObject.save();
        response.error();
      } else {
        // Pass a flag that this is not an existing object
        return Parse.Promise.as(false);
      }
    }).then(function(existingObject) {
      if (existingObject) {
        // Existing object, stop initial save
        response.error("Existing object");
      } else {
        // New object, let the save go through
        response.success();
      }
    }, function (error) {
      response.error(error);
    });
});

推荐答案

在这种情况下,关键是兑现承诺.

The key in this case is to work with the promises.

您要达到的目标类似于以下内容:

What you are trying to reach is something like the following:

Parse.Cloud.beforeSave("Car", function(request, response) {
    if (!request.object.isNew()) {
      // Let existing object updates go through
      response.success();
    }
    var query = new Parse.Query("Car");
    // Add query filters to check for uniqueness
    query.equalTo("number_plate", request.object.get("number_plate"));
    query.first().then(function(existingObject) {
      if (existingObject) {
        // Update existing object. here you can do all the object updates you want 
        if (request.object.get("columnToUpdate") != undefined){
          existingObject.set('columnToUpdate',request.object.get("columnToUpdate"));
        }
        return existingObject.save();
        response.error();
      } else {
        // Pass a flag that this is not an existing object
        return Parse.Promise.as(false);
      }
    }).then(function(existingObject) {
      if (existingObject) {
        // Existing object, stop initial save
        response.error("Existing object");
      } else {
        // New object, let the save go through
        response.success();
      }
    }, function (error) {
      response.error(error);
    });
});

这篇关于解析云更新唯一列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆