2013-11-16 4 views
0

Я новичок в Objective-C и Основные данные. Я работаю над небольшим проектом в рамках своего обучения. Я создал Core Data с такими объектами, как Product, OrderItem, Sales и Supplier.Извлечь данные из основных данных нескольких объектов

Атрибуты:

 
Product : product-id, supplier-id, productName, category, subcategory,qty, price,minStock,frequency. 
Order : order-id, orderDate. 
OrderItem : order-id, product-id,qty,price, total, orderDate. 

я создал отношения между Product и OrderItem с OrderItem обратной к Product.

 
Relationship    Destination   Inverse 
ordersItem     OrderItem   -- 

для OrderItem к продукту:

 
Relationship    Destination   Inverse 
product     Product    ordersItem 

Моя главная проблема в том, как я показываю заказанные товары из OrderItem путем присоединения изделия как: Product-ид, ProductName, OrderDate, OrderId, Кол-во, Цена, всего?

Чтобы достичь выше, если это нормальный sql, я мог бы работать как «Выбрать идентификатор продукта, productName, order-id, orderDate, qty, price, total from OrderItem o, Product p где o.product-id = p. продукт-идентификатор»

Тот же способ извлечения из 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]; 
    Product *entDesc =[NSEntityDescription insertNewObjectForEntityForName:@"Product" inManagedObjectContext:context]; 

    //set Product details 
    entDesc.productName = self.txtName.text; 
    entDesc.category = self.txtCategory.text; 
    entDesc.qty=[NSNumber numberWithInteger:[self.txtQty.text integerValue]]; 

    //add OrderItems details here 
    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 is the relationship object from orderItem to Product and prodToOrder is relationship from Product to OrderItem 

    //I am getting error with this line. I think it expects for array or comma based items 
    //Please help 
    orders.orderToProd = [NSSet setWithObject: entDesc.prodToOrder]; 


    NSError *error = nil; 
    // Save the object to persistent store 
    if (![context save:&error]) { 
     NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); 
    } 


} 

ответ

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, ... 
} 

Это предполагает, что вы имеют отношение product от OrderItem до Продукт , а также отношения order от OrderItem до Заказать.

Обратите внимание, что атрибуты order-id, product-id из OrderItem являются избыточными, как соответствующий продукт и Заказать дается через отношения. (Другими словами, Core Data использует отношения, а не «внешние ключи».)


К вашему добавленным вопрос: Если предположить, что orderToProd является «однозначно» отношения с OrdersItem в продукт, вы могли бы сделать следующее, чтобы установить отношения между вновь создаваемых объектов:

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

Спасибо, Мартин !, Я дам ему ход и дам вам знать результаты. – user1926649

+0

Я действительно смущен. Скажем, я добавляю детали продукта к товарному объекту позже, чтобы захватить любое имя продукта из объекта Product и добавить в OrderItem внешние ключи (идентификатор продукта и идентификатор заказа). В основных данных, если я не сохраняю общее поле в обоих объектах, как знает Core Data? – user1926649

+0

@ user1926649: вы просто установили отношения, например 'theOrderItem.product = theProduct' добавляет' theOrderItem' в элементы заказа 'theProduct', если отношения и обратные отношения правильно определены. –

Смежные вопросы