在没有任何定义关系的情况下加入核心数据实体
Join in Core Data entities without any defined relationship
我的核心数据数据库中有两个实体 Product 和 Variant,但尚未定义任何关系。我正在从一些 Web 服务的表格中添加数据。这些表有 prodct_id 作为公共列,我想将它用作关系。
我想按照以下查询获取数据:
select * from Product, Variant where Product.product_id = Variant.product_id
我是核心数据的新手,如何获得所需的数据?
CoreData 与关系数据库并不完全相同,因此没有简单的方法可以做到这一点。
我的解决方案是使用 NSPredicate
首先检索所有唯一的 product_id
,然后使用这些 product_id
获取所有 Product
和 Variant
,最后,将它们与代码配对。
NSEntityDescription *productEntity;
NSEntityDescription *variantEntity;
fetchRequest.resultType = NSManagedObjectResultDictionary;
fetchRequest.propertiesToFetch = [NSArray arrayWithObject:[[variantEntity propertiesByName] objectForKey:@"product_id"]];
fetchRequest.returnsDistinctResults = YES;
NSArray *productIDDictionaryArray = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
NSArray *productIDArray = [productIDDictionaryArray valueForKey:@"product_id"]; //this is magic
NSFetchRequest *productFetch = [[NSFetchRequest alloc] init];
[productFetch setEntity:productEntity]
[productFetch setPredicate: [NSPredicate predicateWithFormat: @"(product_id IN %@)", productIDArray]];
NSError *error;
NSArray *products = [MOC
executeFetchRequest:productFetch error:&error];
NSFetchRequest *variantFetch = [[NSFetchRequest alloc] init];
[variantFetch setEntity:variantEntity]
[variantFetch setPredicate: [NSPredicate predicateWithFormat: @"(product_id IN %@)", productIDArray]];
NSError *error;
NSArray *variants = [MOC
executeFetchRequest:variantFetch error:&error];
//pair product and variants with the same product_id using code
我的核心数据数据库中有两个实体 Product 和 Variant,但尚未定义任何关系。我正在从一些 Web 服务的表格中添加数据。这些表有 prodct_id 作为公共列,我想将它用作关系。
我想按照以下查询获取数据:
select * from Product, Variant where Product.product_id = Variant.product_id
我是核心数据的新手,如何获得所需的数据?
CoreData 与关系数据库并不完全相同,因此没有简单的方法可以做到这一点。
我的解决方案是使用 NSPredicate
首先检索所有唯一的 product_id
,然后使用这些 product_id
获取所有 Product
和 Variant
,最后,将它们与代码配对。
NSEntityDescription *productEntity;
NSEntityDescription *variantEntity;
fetchRequest.resultType = NSManagedObjectResultDictionary;
fetchRequest.propertiesToFetch = [NSArray arrayWithObject:[[variantEntity propertiesByName] objectForKey:@"product_id"]];
fetchRequest.returnsDistinctResults = YES;
NSArray *productIDDictionaryArray = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
NSArray *productIDArray = [productIDDictionaryArray valueForKey:@"product_id"]; //this is magic
NSFetchRequest *productFetch = [[NSFetchRequest alloc] init];
[productFetch setEntity:productEntity]
[productFetch setPredicate: [NSPredicate predicateWithFormat: @"(product_id IN %@)", productIDArray]];
NSError *error;
NSArray *products = [MOC
executeFetchRequest:productFetch error:&error];
NSFetchRequest *variantFetch = [[NSFetchRequest alloc] init];
[variantFetch setEntity:variantEntity]
[variantFetch setPredicate: [NSPredicate predicateWithFormat: @"(product_id IN %@)", productIDArray]];
NSError *error;
NSArray *variants = [MOC
executeFetchRequest:variantFetch error:&error];
//pair product and variants with the same product_id using code