【问题标题】:Fetch data from core data multiple entities从核心数据多个实体中获取数据
【发布时间】:2013-11-29 14:59:55
【问题描述】:

我是 Objective-CCore Data 的新手。作为学习的一部分,我正在做一个小项目。我使用ProductOrderItemSalesSupplier 等实体创建了Core Data。

属性:

产品:产品 ID、供应商 ID、产品名称、类别、子类别、数量、价格、最小库存、频率。 订单:订单 ID,订单日期。 OrderItem : 订单 ID、产品 ID、数量、价格、总计、订单日期。

我在ProductOrderItem 之间创建了关系,其中OrderItemProduct 反向。

关系目的地逆 订单项 订单项 --

从 OrderItem 到产品:

关系目的地逆 产品 产品订单项目

我的主要问题是如何通过以下方式加入产品来显示 OrderItem 中的已订购商品: Product-id、ProductName、OrderDate、OrderId、Qty、Price、Total ?

如果是正常的 sql,要实现上述目标,我可以像“从 OrderItem o 中选择产品 ID、产品名称、订单 ID、订单日期、数量、价格、总计、产品 p,其中 o.product-id=p.product -id"

我可以尝试使用使用核心数据从 OrderItem 获取的相同方法:

-(NSMutableArray *)loadData{

 // Fetch the OrderItems from OrderItem model through from persistent data store
NSManagedObjectContext *managedObjectContext = [self context];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"OrderItem"];

//How do i do to get productName from Product
//the relationship is based on "product" from OrderItem to Product
//I need to get productName and add to array list below to display on the screen.

NSMutableArray *orderList =[[NSMutableArray alloc]init];

orderList =[[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];

return orderList; 
}

我没有从一个实体显示任何问题,但我的问题来自多个实体?

任何帮助或建议将不胜感激?

我试图在下面的代码中同时添加 Product 和 OrderItems,但出现错误“orders.orderToProd = [NSSet setWithObject: entDesc.prodToOrder];”这是正确的方法吗?

- (IBAction)cmdAdd:(id)sender { NSManagedObjectContext *context =[self managedObjectContext]; 产品 *entDesc =[NSEntityDescription insertNewObjectForEntityForName:@"Product" inManagedObjectContext:context]; //设置产品详情 entDesc.productName = self.txtName.text; entDesc.category = self.txtCategory.text; entDesc.qty=[NSNumber numberWithInteger:[self.txtQty.text integerValue]]; //在此处添加 OrderItems 详细信息 OrderItems *orders=[NSEntityDescription insertNewObjectForEntityForName:@"OrderItems" inManagedObjectContext:context]; orders.price=[NSNumber numberWithInteger:[self.txtprice.text integerValue]]; orders.orderQty=[NSNumber numberWithInteger:[self.txtOrderQty.text integerValue]]; orders.total=[NSNumber numberWithInteger:[self.txtTotal.text integerValue]]; //orderToProd 是 orderItem 到 Product 的关系对象,prodToOrder 是 Product 到 OrderItem 的关系 //我收到这条线的错误。我认为它期望基于数组或逗号的项目 //请帮忙 orders.orderToProd = [NSSet setWithObject: entDesc.prodToOrder]; NSError *error = nil; // 将对象保存到持久存储 if (![context save:&error]) { NSLog(@"无法保存!%@ %@", error, [错误localizedDescription]); } }

【问题讨论】:

    标签: objective-c core-data


    【解决方案1】:
    NSArray *orderItems = [managedObjectContext executeFetchRequest:fetchRequest error:nil];
    

    返回OrderItem对象数组,可以访问“产品”和“订单” 简单地使用关系的属性,例如:

    for (OrderItem *oi in orderItems) {
        Product *product = oi.product;
        Order *order = oi.order;
        // Display product.productName, oi.qty, order.order-id, ...
    }
    

    这假设您有一个从 OrderItemProduct 的关系 product 以及从 OrderItemOrder 的关系 order

    注意OrderItem的属性order-id, product-id是多余的, 因为相应的 ProductOrder 是通过关系给出的。 (换句话说,Core Data 使用关系而不是“外键”。)


    对于您添加的问题:假设 orderToProd 是来自 OrdersItemProduct,您将执行以下操作来建立关系 新创建的对象之间:

    Product *entDesc = ...
    // ...
    OrderItems *orders = ...;
    // ...
    orders.orderToProd = entDesc;
    

    【讨论】:

    • 谢谢你,马丁!我会试一试,让你知道结果。
    • 我其实很困惑。假设,稍后我将产品详细信息添加到产品实体中,我从产品实体中获取任何产品名称并使用外键(产品 ID 和订单 ID)添加到 OrderItem。在核心数据中,如果我不在两个实体中保留公共字段,核心数据如何知道?
    • @user1926649:你只是设置了关系,例如theOrderItem.product = theProducttheOrderItem添加到theProduct的订单项中,如果关系和反向关系定义正确。
    • 我已经为 Product 和 OrderItems 重置了我的关系并再次反转,并同时尝试为 Product 和 OrderItems 添加错误。请参考上面的最后一节来。感谢您的帮助。
    • @user1926649:这有点令人困惑,因为这些关系在您的原始问题和添加的代码中具有不同的名称。 - 请描述哪些关系是一对一的,哪些是对多的。 - 我假设 Product->OrderItems 是“对多”,而相反的“OrderItems->Product”是对一。对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    相关资源
    最近更新 更多