在一次 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 父子详细信息。