gpt4 book ai didi

ios - 根据FK中的值查询表

转载 作者:行者123 更新时间:2023-11-29 02:51:28 25 4
gpt4 key购买 nike

我有几个表:

User:
- userId (NString)
- name (NSString)

Report:
- reportName (NSString)
- user (foreign key to user table)

我有一个 userId,我想获取该用户的所有报告。我必须先从核心数据中查询用户吗?

如果是这样,这很糟糕,因为我正在尝试按照 apple 的概述来实现查找和更新逻辑。就我而言,每个用户只有一份报告。我从服务器取回了一组报告,每个报告都包含一个 userId(由服务器分配)。如果我还没有该用户的报告,我需要创建一个。如果我有该用户的报告,我需要使用新报告进行更新。

所以基本上我创建了一个 NSString (userId's) 数组以在谓词中使用:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Report" inManagedObjectContext:context]];
[fetchRequest setPredicate: [NSPredicate predicateWithFormat:@"(userId IN %@)", userIds]];

然而在这种情况下userId并不真正存在,user是一个外来关系。

我无法建立外部关系,只能将 userId 存储在报告中,但稍后我需要手动加入。那是更好的选择吗?

最佳答案

Core Data 中不存在外键的概念。当然,它们用于可能的后备存储之一,但外键是隐藏的。取而代之的是我们之间的关系。

如果你已经建立了关系,你就走关键路径。无需进一步提取。

你的人际关系需要反转。因此,如果报告有用户,则用户有报告。

为了您的目的,我建议实现一个reportWithReportName:(执行获取),findOrCreateWithReportName:(尝试获取,必要时执行插入), userWithUserID:(获取)和 findOrCreateUserWithUserID:name:(获取,如果需要则插入)。

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);
}

关于ios - 根据FK中的值查询表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24457416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com