Parse.com:如何加入2个表?

时间:2014-05-27 10:58:31

标签: ios join parse-platform

我是Parse.com的新用户。我有关于加入课程的问题。使用SQL很容易,但我找不到Parse的解决方案。谢谢你的帮助!

我有两个课程:ProductDatabaseMachineDatabase

  • ProductDatabase 包含4列: serialNumber name description price
  • MachineDatabase 包含3列: serialNumber date idMachine

我想显示以下数据:名称,描述,价格,日期。

- (PFQuery *)queryForTable
{
    PFQuery *productQuery = [PFQuery queryWithClassName:@"ProductDatabase"];

    PFQuery *query = [PFQuery queryWithClassName:@"MachineDatabase"];
    [query whereKey:@"serialNumber" matchesKey:@"serialNumber" inQuery:productQuery];
    [query includeKey:@"name"];
    [query includeKey:@"description"];
    [query includeKey:@"price"];
    [query orderByDescending:@"date"];

    return query;
}

// In my (UITableViewCell *)tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object

cell.nameLabel.text = [object objectForKey:@"name"];
cell.textLabel.text = [object objectForKey:@"description"];
cell.priceLabel.text = [object objectForKey:@"price"];

NSDate *productDate = [object objectForKey:@"date"];
NSString * dateString = [self timeSincePublished:productDate];
cell.dateLabel.text = dateString;

此代码显示日期,但不显示名称,描述,价格。

你知道如何加入这两个课程吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

您正在以RDBS方式思考它,并且它对于像Parse这样的工具来说并不理想。您可能需要对架构进行一些重组。理想情况下,您应该尝试使用Parse中的指针(假设您的是一对多或一对一的关系)。

所以你的班级结构如下:

ProductDatabase:objectId,serialNumber,名称,描述,价格, 计算机 MachineDatabase:objectId,serialNumber,date,idMachine

如果serialNumber不是特定于Product和Machine,则可以将其保留在任何一个类中。字段' 计算机 '在ProductDatabase中应该是指向MachineDatabase中特定行的对象指针。

PFQuery *query = [PFQuery queryWithClassName:@"ProductDatabase"];
[query includeKey:@"machine"];

includeKey 关键字将展开关系字段 计算机 ,并将MachineDatabase中相应行的字段添加到结果。

[query findObjectsInBackgroundWithBlock:^(NSArray *products, NSError *error) {

    for (PFObject *product in products) {
         // Machine row will be an object inside the retrieved product row. 
         PFObject *machine = product[@"machine"];
         NSLog(@"retrieved related machine: %@", machine);
    }
}];