在一次 Parse REST API 调用中检索父项和相关子项
Retrieving parent plus related children in one Parse REST API call
我正在构建一个小应用程序,我需要做的第一件事是使用 AngularJS 的 ngResource 调用 Parse 的 REST API。
我已经成功构建了两个 Parse 类(我们暂时称它们为 "Parent" 和 "Child")并在它们之间建立多对多关系,这样Parent 可以与零 n 个 Child 对象相关,而 Child 可以与零 n 个 Parent 对象相关。
到目前为止,非常基本的东西工作正常。例如这个方法,成功获取了所有的Parent对象:
.factory('Parent', function($resource, appConfig) {
return $resource('https://api.parse.com/1/classes/Parent/:id', {}, {
list : {
method : 'GET',
headers: appConfig.parseHttpsHeaders
}
});
})
太棒了。它甚至有一个描述关系的 "Child" 属性(如您所料),但没有 return 每个父对象中的实际子对象。
现在我需要扩展此方法以同时检索相关的 Child 对象 - 我真的不想为每个 Parent 进行另一个调用来获取相关的 Child 对象。
所以我们试试这个:
.factory('Parent', function($resource, appConfig) {
return $resource('https://api.parse.com/1/classes/Parent/:id', {}, {
list : {
method : 'GET',
headers: appConfig.parseHttpsHeaders,
params : {
'include' : 'Child'
}
}
});
})
...和服务器 returns...与以前完全相同的响应。子记录不包括在内。
我哪里出错了?
编辑:请注意,虽然我已经设置了父子关系,但如果我需要以这种方式查询数据,这不是最好的处理方式,我愿意接受建议。将有一组有限的父对象(假设少于 100 个)和一组更小的可能的子对象(少于 30 个)。
问题是指针和关系之间的区别。可以使用 include 急切地获取指针,但不能使用关系。如果 parent->child 关系的基数较低,请使用指针数组而不是关系,您将得到 expect/desire.
的结果
在 danh 的帮助下,我已经找到了如何按照我想要的方式进行设置。这是一个小代码片段:
var cId = 'CHILD_ID';
var pId = 'PARENT_ID';
var Child = Parse.Object.extend("child");
var cQ = new Parse.Query(Child);
var Parent = Parse.Object.extend("parent");
var pQ = new Parse.Query(Parent);
pQ.get(pId, {
success: function (mResponse) {
console.log(pResponse);
cQ.get(cId, {
success: function (cResponse) {
console.log(cResponse);
pResponse.add('children', cResponse);
pResponse.save();
},
error: function (object, error) {
// The object was not retrieved successfully.
// error is a Parse.Error with an error code and message.
}
});
},
error: function (object, error) {
// The object was not retrieved successfully.
// error is a Parse.Error with an error code and message.
}
});
首先,在 Parse.com 数据浏览器中创建两个 classes。确保父 class 定义了一个数组列(在本例中它被称为 'children')。
将您的父对象 ID 和子对象 ID 添加到脚本中的相关变量并 运行 它(显然在脚本顶部包括您的 API 键)。嘿,太快了!对于您 运行 脚本所针对的每个关系,您都会有一个指针数组。
不仅如此,我可以确认我的 AngularJS REST Api 一次调用 returns 父子详细信息。
我正在构建一个小应用程序,我需要做的第一件事是使用 AngularJS 的 ngResource 调用 Parse 的 REST API。
我已经成功构建了两个 Parse 类(我们暂时称它们为 "Parent" 和 "Child")并在它们之间建立多对多关系,这样Parent 可以与零 n 个 Child 对象相关,而 Child 可以与零 n 个 Parent 对象相关。
到目前为止,非常基本的东西工作正常。例如这个方法,成功获取了所有的Parent对象:
.factory('Parent', function($resource, appConfig) {
return $resource('https://api.parse.com/1/classes/Parent/:id', {}, {
list : {
method : 'GET',
headers: appConfig.parseHttpsHeaders
}
});
})
太棒了。它甚至有一个描述关系的 "Child" 属性(如您所料),但没有 return 每个父对象中的实际子对象。
现在我需要扩展此方法以同时检索相关的 Child 对象 - 我真的不想为每个 Parent 进行另一个调用来获取相关的 Child 对象。
所以我们试试这个:
.factory('Parent', function($resource, appConfig) {
return $resource('https://api.parse.com/1/classes/Parent/:id', {}, {
list : {
method : 'GET',
headers: appConfig.parseHttpsHeaders,
params : {
'include' : 'Child'
}
}
});
})
...和服务器 returns...与以前完全相同的响应。子记录不包括在内。
我哪里出错了?
编辑:请注意,虽然我已经设置了父子关系,但如果我需要以这种方式查询数据,这不是最好的处理方式,我愿意接受建议。将有一组有限的父对象(假设少于 100 个)和一组更小的可能的子对象(少于 30 个)。
问题是指针和关系之间的区别。可以使用 include 急切地获取指针,但不能使用关系。如果 parent->child 关系的基数较低,请使用指针数组而不是关系,您将得到 expect/desire.
的结果在 danh 的帮助下,我已经找到了如何按照我想要的方式进行设置。这是一个小代码片段:
var cId = 'CHILD_ID';
var pId = 'PARENT_ID';
var Child = Parse.Object.extend("child");
var cQ = new Parse.Query(Child);
var Parent = Parse.Object.extend("parent");
var pQ = new Parse.Query(Parent);
pQ.get(pId, {
success: function (mResponse) {
console.log(pResponse);
cQ.get(cId, {
success: function (cResponse) {
console.log(cResponse);
pResponse.add('children', cResponse);
pResponse.save();
},
error: function (object, error) {
// The object was not retrieved successfully.
// error is a Parse.Error with an error code and message.
}
});
},
error: function (object, error) {
// The object was not retrieved successfully.
// error is a Parse.Error with an error code and message.
}
});
首先,在 Parse.com 数据浏览器中创建两个 classes。确保父 class 定义了一个数组列(在本例中它被称为 'children')。
将您的父对象 ID 和子对象 ID 添加到脚本中的相关变量并 运行 它(显然在脚本顶部包括您的 API 键)。嘿,太快了!对于您 运行 脚本所针对的每个关系,您都会有一个指针数组。
不仅如此,我可以确认我的 AngularJS REST Api 一次调用 returns 父子详细信息。