Ios 基于FK中的值的查询表
我有两张桌子:Ios 基于FK中的值的查询表,ios,core-data,foreign-key-relationship,predicate,Ios,Core Data,Foreign Key Relationship,Predicate,我有两张桌子: User: - userId (NString) - name (NSString) Report: - reportName (NSString) - user (foreign key to user table) 我有一个用户ID,我想获取该用户的所有报告。我必须首先从核心数据查询用户吗 如果是这样的话,这是不好的,因为我正试图实现查找和更新逻辑,正如苹果公司概述的那样。在我的例子中,每个用户只有一个报告。我从服务器返回一个报告数组,每个报告都包含一个
User:
- userId (NString)
- name (NSString)
Report:
- reportName (NSString)
- user (foreign key to user table)
我有一个用户ID,我想获取该用户的所有报告。我必须首先从核心数据查询用户吗
如果是这样的话,这是不好的,因为我正试图实现查找和更新逻辑,正如苹果公司概述的那样。在我的例子中,每个用户只有一个报告。我从服务器返回一个报告数组,每个报告都包含一个用户ID(由服务器分配)。如果我还没有该用户的报告,我需要创建一个。如果我有该用户的报告,我需要用新报告更新
因此,基本上我创建了一个NSString(userId)数组,用于谓词:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Report" inManagedObjectContext:context]];
[fetchRequest setPredicate: [NSPredicate predicateWithFormat:@"(userId IN %@)", userIds]];
然而,在这种情况下,userId实际上并不存在,用户是一个外来关系
我无法建立外部关系,只能将userId存储在报告中,但稍后我需要手动加入。这是更好的选择吗 核心数据中不存在外键的概念。当然,它们用于一个可能的备份存储,但是外键是隐藏的。取而代之的是我们的关系 如果你已经建立了关系,你只需走关键路线。无需进一步提取 你的关系需要相反的结果。因此,如果一个报表有一个用户,该用户就有报表 出于您的目的,我建议实现一个
reportWithReportName:
(执行提取)、findOrCreateWithReportName:
(尝试提取,必要时执行插入)、userWithUserID:
(执行提取)和findOrCreateUserWithUserID:name:
(提取,必要时插入)
您能澄清一下,报表上的
user
是核心数据关系还是SQL风格的外键吗?您可以用两种方式引用它。对不起,这是一种核心数据关系。这让我觉得很陌生,很困惑;)是的,现在你概括起来似乎很容易;)获取用户并使用反向关系更新报告。谢谢
Report *aReport;
User *someUser;
NSLog(@"%@", aReport.user.name, aReport.user.userID);
NSLog (@"%@", someUser.userID, someUser.reports);
foreach (Report *report in someUser.reports) {
NSLog(@"%@", report.reportName);
}