Parse platform 在Parse中保存基本关系

Parse platform 在Parse中保存基本关系,parse-platform,relation,Parse Platform,Relation,这个例子很直截了当,但毫不奇怪,它不起作用。mLate是后期表中的一个对象或对象数组。 我的代码: var user = Parse.Object.extend("User"); var userQuery = new Parse.Query(Parse.User); var Late = Parse.Object.extend("Late"); var lateQuery = new Parse.Query(Late); userQuery.get("yCDD

这个例子很直截了当,但毫不奇怪,它不起作用。mLate是后期表中的一个对象或对象数组。 我的代码:

var user = Parse.Object.extend("User"); 
var userQuery = new Parse.Query(Parse.User);        
var Late = Parse.Object.extend("Late");        
var lateQuery = new Parse.Query(Late);
userQuery.get("yCDDEWoiwM", {//this is where the userID goes
     success: function (userDetails) {
           var relation = userDetails.relation("mLate");
           relation.add(mLate);
           userDetails.save(); 
考虑到Parse SDK,我无法想象我会错在哪里。我一直在 400后(请求错误)


一个新的假设和更多的代码

我知道这是一件非常简单的事情,我真的很生气,因为解析很少给他们解释的内容添加任何细节。你看过他们的API了吗(好的,我不想进入我的肥皂盒…)

我的假设是,我多次转换了最新表中的Parse.Object,不知何故,Parse不再知道那里发生了什么

下面是代码的更完整视图:

var user = Parse.Object.extend("User"); 
    var userQuery = new Parse.Query(Parse.User);        
    var Late = Parse.Object.extend("Late");        
    var lateQuery = new Parse.Query(Late);
    userQuery.get("yCDDEWoiwM", {//this is where the userID goes
         success: function (userDetails) {
mLate = [];
mLate1 = [];

lateQuery.find({
     success: function (allLate) {
          var aLate = allLate
          for (var i = 0; i < aLate.length; i++){
          var oneLate = aLate[i];
          if(something valid) {
          mLate.push(oneLate)
          }else{
          mLate1.push(oneLate)

var relation = userDetails.relation("mLate");
               relation.add(mLate);
               userDetails.save();
var user=Parse.Object.extend(“用户”);
var userQuery=newparse.Query(Parse.User);
var Late=Parse.Object.extend(“Late”);
var lateQuery=newparse.Query(Late);
getuserquery.get(“yCDDEWoiwM”,{//userID就在这里
成功:函数(userDetails){
mLate=[];
mLate1=[];
lateQuery.find({
成功:功能(allLate){
var aLate=ALLATE
对于(变量i=0;i
由于未定义mLate变量,因此未100%清楚说明目的,但您可以获得如下用户:

var user = new Parse.User({id:"yCDDEWoiwM"});
user.fetch().then(function(user) {
    // add to the relation here, then
    return user.save();
}).then(function () {
    console.log("saved");
});
"_User", "_Roles", "_Installation"

您不能以这种方式扩展用户。所有特殊类(用户、安装、角色等)的地址应如下所示:

var user = new Parse.User({id:"yCDDEWoiwM"});
user.fetch().then(function(user) {
    // add to the relation here, then
    return user.save();
}).then(function () {
    console.log("saved");
});
"_User", "_Roles", "_Installation"
例如:

var user = Parse.Object.extend("_User");
但最好以这种方式引用它们:

var user = Parse.Object.extend(Parse.User);
但据我所知,你也不需要第一行创建
用户
对象。如果你只想创建一个查询,你也不需要“扩展”一个对象。如果你想创建一个指针,通常使用“扩展”,但在你的情况下,你不需要

看看这是否适合您:

//var user = Parse.Object.extend(Parse.User); 
var userQuery = new Parse.Query(Parse.User);        
//var Late = Parse.Object.extend("Late");        
var lateQuery = new Parse.Query("Late");
userQuery.get("yCDDEWoiwM", {//this is where the userID goes
     success: function (userDetails) {
           var relation = userDetails.relation("mLate");
           relation.add(mLate);
           userDetails.save(); 
如果要使查询更具动态性,可以执行以下操作:

var userQuery = new Parse.Query(Parse.User);               
queryQuery.equalTo("objectId", userId); 
userQuery.first().then(function(userDetails){

   var relation = userDetails.relation("mLate");
   relation.add(mLate);

   return Parse.Promise.when(userDetails.save());
}).then( // make your call to response.success ...);
另一个可能的问题是,在
userDetails.save()
操作有机会完成之前,函数正在返回。如果将查询修改为与上述类似的方式以使用,则它将保证对
save()
的异步调用将实际完成


未显示的是调用
响应的承诺链的延续。成功
错误
,但您可以将其添加进去。

我得到以下错误:未捕获类型错误:无法将未定义或空值转换为您建议的对象:var user=new Parse.user(“yCDDEWoiwM”);user.fetch()。然后(函数(user){var relation=user.relation(“mLate”);relation.add(mLate);return user.save();})哪里出了问题?要明确的是,mLate是后期表中的几个对象。每个用户可能有许多后期对象,任何后期对象都可能有许多用户。唯一的区别是{id:}?我尝试了这个,但仍然收到了400个错误的请求,只是想弄清楚您对Javascript SDK的建议是什么?您可能是对的,但到目前为止,我发现我上面展示的模式是正确的。我非常确定您也可以使用.extend(Parse.User)进行扩展,但我不知道“用户”、“角色”或“安装”"。最后,我想对大量的多对多关系进行适当建模,因此我真的需要一个关系,但尚未保存此代码。是的,我指的是Javascript SDK。下面是一个直接来自有关查询的文档的示例。我想如果你看到人们使用
Query(“User”)
它永远不会工作,但是
Query(“u User”)
可能会工作,但解析团队建议不要这样做。记录在案的方法和被认为是“正确”的方法是
Query(Parse.User)
您确定该objectId仍然存在吗?可能您删除了该对象,并在其位置上放置了一个新对象?我编辑了我的答案。我认为您的问题可能是您的
objectId
不再存在,或者您对
userDetails.save()的调用在函数返回之前没有足够的时间完成(因为它是异步的)。在对代码进行修改后,您仍然没有给函数足够长的时间来完成
.save()
操作。正如我在回答中指出的,您需要调用
Parse.Promise.when(userDetails.save());
。因为
save()
是异步的。您需要让您的函数知道它需要等待操作完成,您可以通过创建承诺来做到这一点。您以前的所有尝试可能都有效,但函数在
save()之前返回
可以完成-尤其是当有很多关系需要添加时。如果您添加此承诺,您的代码将按预期工作。当我console.log(relation)时,mLate未定义,但当我console.log在关系之外时,它是一个非常干净的对象数组。这是怎么回事?我认为这就是问题所在。