Parse.com一对多的问题。是否可以在一个查询中获取所有内容?

时间:2016-03-16 14:49:06

标签: ios objective-c parse-platform one-to-many

在我的应用中,我正在使用Parse.com服务。我有名为ItemPrice的实体。一个项目可能有多个价格,这意味着每个价格对象都有对其项目的引用。物品根本不知道价格。 我的目标是在一个查询中获取项目及其价格。如果我有一个具有一系列价格的物品,那将非常简单。我会做以下事情:

PFQuery* itemsQuery = [PFQuery queryWithClassName:@"Item"];
[itemsQuery includeKey:@"Prices"];

但我没有阵列。所以我将被迫连续两次查询。第一个将获取项目,一旦项目准备好,我将创建第二个:

PFQuery* query = [PFQuery queryWithClassName:@"Price"];
[query whereKey:@"Item" equalTo:fetchedItem];

但我不喜欢它。我想在一个查询中获取项目及其价格。不使用数组甚至可以做到这一点吗?

2 个答案:

答案 0 :(得分:1)

你正在考虑很多RDBMS和小NoSQL。解析数据库是一个NoSQL存储库,因此您不具有与使用关系数据库相同的特性。

在这种情况下的解决方案是 - 在NoSQL中,在这种情况下比连接表更常见 - 将价格存储在Item实体内的数组结构中并查询。

以下是Parse.com论坛的相关链接:

  

https://www.parse.com/questions/how-to-join-several-tables-with-one-to-many-relationship

答案 1 :(得分:0)

您的“价格”类需要该项目的“指针”列。指针是PFObjects,在你的情况下 - 'Item'对象。然后你可以在'Price'类上进行查询,得到一个价格对象数组(NSArray *对象):

PFQuery *query = [PFQuery queryWithClassName:@"Price"];
[query includeKey:@"item"];
[query whereKey:@"item" equalTo:selectedItem]; 
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
   if (objects) {
      // do something with price objects here
   }
}];