Parse.com 一对多问题。是否可以在一个查询中获取所有内容?
Parse.com one-to-many issue. Is it possible to fetch everything in one query?
在我的应用程序中,我正在使用 Parse.com
服务。我有名为 Item
和 Price
的实体。一个项目可能有多个价格,这意味着每个价格对象都有对其项目的引用。项目根本不知道价格。
我的目标是在一次查询中获取商品及其价格。如果我有一个具有一系列价格的项目,那将非常简单。我会做以下事情:
PFQuery* itemsQuery = [PFQuery queryWithClassName:@"Item"];
[itemsQuery includeKey:@"Prices"];
但我没有数组。所以我将被迫有两个连续的查询。第一个将获取项目,一旦项目准备就绪,我将创建第二个:
PFQuery* query = [PFQuery queryWithClassName:@"Price"];
[query whereKey:@"Item" equalTo:fetchedItem];
但我不喜欢。我想在一次查询中获取商品及其价格。甚至可以在不使用数组的情况下做到这一点吗?
您正在考虑更多的 RDBMS 而很少考虑 NoSQL。解析数据库是一个 NoSQL 存储,因此您不具有与使用关系数据库相同的特征。
这种情况下的解决方案是——在这种情况下,在 NoSQL 中比连接表更常见——将您的价格存储在 Item
实体内部的数组结构中并查询它。
这是来自 Parse.com
论坛的相关 link:
https://www.parse.com/questions/how-to-join-several-tables-with-one-to-many-relationship
您的 'Price' Class 项目需要一个 'pointer' 列。在您的例子中,指针是 PFObjects - 'Item' 对象。然后你可以在 'Price' Class 上进行查询以获取价格对象数组 (NSArray *objects):
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
}
}];
在我的应用程序中,我正在使用 Parse.com
服务。我有名为 Item
和 Price
的实体。一个项目可能有多个价格,这意味着每个价格对象都有对其项目的引用。项目根本不知道价格。
我的目标是在一次查询中获取商品及其价格。如果我有一个具有一系列价格的项目,那将非常简单。我会做以下事情:
PFQuery* itemsQuery = [PFQuery queryWithClassName:@"Item"];
[itemsQuery includeKey:@"Prices"];
但我没有数组。所以我将被迫有两个连续的查询。第一个将获取项目,一旦项目准备就绪,我将创建第二个:
PFQuery* query = [PFQuery queryWithClassName:@"Price"];
[query whereKey:@"Item" equalTo:fetchedItem];
但我不喜欢。我想在一次查询中获取商品及其价格。甚至可以在不使用数组的情况下做到这一点吗?
您正在考虑更多的 RDBMS 而很少考虑 NoSQL。解析数据库是一个 NoSQL 存储,因此您不具有与使用关系数据库相同的特征。
这种情况下的解决方案是——在这种情况下,在 NoSQL 中比连接表更常见——将您的价格存储在 Item
实体内部的数组结构中并查询它。
这是来自 Parse.com
论坛的相关 link:
https://www.parse.com/questions/how-to-join-several-tables-with-one-to-many-relationship
您的 'Price' Class 项目需要一个 'pointer' 列。在您的例子中,指针是 PFObjects - 'Item' 对象。然后你可以在 'Price' Class 上进行查询以获取价格对象数组 (NSArray *objects):
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
}
}];