将项目附加到获取项目的数组中解析云代码
Append item to array of fetched item Parse Cloud Code
- Javascript
- 解析云代码
在我的应用程序中,User
可以请求加入另一个 Users
帐户。其伪代码如下:
- 发送我们要加入的帐户的
username
- 搜索数据库中是否存在
username
- if
no
return
- if
yes
创建一个新的 AccountRequest
对象
- 将新创建的
AccountRequest
对象添加到我们正在搜索的用户。
我可以完成第 1-4 步,但在完成第 5 步时遇到问题。
这是我正在使用的代码。
Parse.Cloud.define("sendAccountAdditionRequest", function(request, response) {
console.log("-sendAccountAdditionRequest");
// Create the query on the User class
var query = new Parse.Query(Parse.User);
// Set our parameters to search on
query.equalTo("username", request.params.adminUsername);
// Perform search
query.find({
// We found a matching user
success: function(results) {
Parse.Cloud.useMasterKey();
var fetchedUser = results[0]
console.log("--found user");
console.log("--creating new AccountRequest");
// Create a new instance of AccountRequest
var AccountRequestClass = Parse.Object.extend("AccountRequest");
var accountRequest = new AccountRequestClass();
// Set the User it is related to. Our User class has a 1..n relationship to AccountRequest
accountRequest.set("user", fetchedUser);
// Set out other values for the AccountRequest
accountRequest.set("phone", request.params.adminUsername);
accountRequest.set("dateSent", Date.now());
// Save the new AccountRequest
accountRequest.save(null,{
// Once the new AccountRequest has been saved we need to add it to our fetched User
success:function(savedRequest) {
console.log("---adding AccountRequest to fetched User");
//
// === This is where stuff breaks
//
var requestRelation = fetchedUser.relation("accountRequest");
// Now we need to add the new AccountRequest to the fetched User. The accountRequest property for a User is array...I'm not sure how I'm suppose to append a new item to that. I think I need to somehow cast results[0] to a User object? Maybe?
requestRelation.add(savedRequest);
// We perform a save on the User now that the accountRequest has been added.
fetchedUser.save(null, {
success:function(response) {
console.log("----AccountRequest complete");
response.success("A request has been sent!");
},
error:function(error) {
// This is printing out: ParseUser { _objCount: 2, className: '_User', id: 'QjhQxWCFWs' }
console.log(error);
response.error(error);
}
});
//
// ================================
//
//response.success("A request has been sent!");
},
// There was an error saving the new AccountRequest
error:function(error) {
response.error(error);
}
});
},
// We were not able to find an account with the supplied username
error: function() {
response.error("An account with that number does not exist. Please tell your administrator to sign up before you are added.");
}
});
});
我认为我的问题是从初始查询的 returned 搜索结果中获取 accountRequest
关系。另外要注意的是,我还没有创建我的 PFUser
的 accountRequest
属性,我的理解是,当我执行 save
函数时,这将由 Parse 自动完成.
是否会为您创建 accountRequest 取决于是否设置了 class 级权限以允许客户端应用程序添加字段。对于您的 Parse.User.
,这可能设置为 NO
但是 Parse.User 上的关系无论如何都不需要,因为您已经在 AccountRequest class 上建立了它。给定一个用户,您可以通过以下方式获取它的 accountRequests:
PFQuery *query = [PFQuery queryWithClassName:@"AccountRequest"];
[query whereKey:@"user" equalTo:aUser];
query.find()...
这相当于获取 User 的关系,获取其查询并 运行 它。
关于您的代码的几点注意事项:(a) findOne
会在您知道只有一个结果时为您省去一行,(b) 使用 Parse.Promise
会真正让事情变得井井有条。
- Javascript
- 解析云代码
在我的应用程序中,User
可以请求加入另一个 Users
帐户。其伪代码如下:
- 发送我们要加入的帐户的
username
- 搜索数据库中是否存在
username
- if
no
return - if
yes
创建一个新的AccountRequest
对象 - 将新创建的
AccountRequest
对象添加到我们正在搜索的用户。
我可以完成第 1-4 步,但在完成第 5 步时遇到问题。
这是我正在使用的代码。
Parse.Cloud.define("sendAccountAdditionRequest", function(request, response) {
console.log("-sendAccountAdditionRequest");
// Create the query on the User class
var query = new Parse.Query(Parse.User);
// Set our parameters to search on
query.equalTo("username", request.params.adminUsername);
// Perform search
query.find({
// We found a matching user
success: function(results) {
Parse.Cloud.useMasterKey();
var fetchedUser = results[0]
console.log("--found user");
console.log("--creating new AccountRequest");
// Create a new instance of AccountRequest
var AccountRequestClass = Parse.Object.extend("AccountRequest");
var accountRequest = new AccountRequestClass();
// Set the User it is related to. Our User class has a 1..n relationship to AccountRequest
accountRequest.set("user", fetchedUser);
// Set out other values for the AccountRequest
accountRequest.set("phone", request.params.adminUsername);
accountRequest.set("dateSent", Date.now());
// Save the new AccountRequest
accountRequest.save(null,{
// Once the new AccountRequest has been saved we need to add it to our fetched User
success:function(savedRequest) {
console.log("---adding AccountRequest to fetched User");
//
// === This is where stuff breaks
//
var requestRelation = fetchedUser.relation("accountRequest");
// Now we need to add the new AccountRequest to the fetched User. The accountRequest property for a User is array...I'm not sure how I'm suppose to append a new item to that. I think I need to somehow cast results[0] to a User object? Maybe?
requestRelation.add(savedRequest);
// We perform a save on the User now that the accountRequest has been added.
fetchedUser.save(null, {
success:function(response) {
console.log("----AccountRequest complete");
response.success("A request has been sent!");
},
error:function(error) {
// This is printing out: ParseUser { _objCount: 2, className: '_User', id: 'QjhQxWCFWs' }
console.log(error);
response.error(error);
}
});
//
// ================================
//
//response.success("A request has been sent!");
},
// There was an error saving the new AccountRequest
error:function(error) {
response.error(error);
}
});
},
// We were not able to find an account with the supplied username
error: function() {
response.error("An account with that number does not exist. Please tell your administrator to sign up before you are added.");
}
});
});
我认为我的问题是从初始查询的 returned 搜索结果中获取 accountRequest
关系。另外要注意的是,我还没有创建我的 PFUser
的 accountRequest
属性,我的理解是,当我执行 save
函数时,这将由 Parse 自动完成.
是否会为您创建 accountRequest 取决于是否设置了 class 级权限以允许客户端应用程序添加字段。对于您的 Parse.User.
,这可能设置为 NO但是 Parse.User 上的关系无论如何都不需要,因为您已经在 AccountRequest class 上建立了它。给定一个用户,您可以通过以下方式获取它的 accountRequests:
PFQuery *query = [PFQuery queryWithClassName:@"AccountRequest"];
[query whereKey:@"user" equalTo:aUser];
query.find()...
这相当于获取 User 的关系,获取其查询并 运行 它。
关于您的代码的几点注意事项:(a) findOne
会在您知道只有一个结果时为您省去一行,(b) 使用 Parse.Promise
会真正让事情变得井井有条。