我正在努力找出以多对一关系检索单个最新结果的最有效方法。
示例:
实体A - 团队(姓名) 实体B - 员工(姓名,已创建)
团队< - >>雇员
我想在Employee上创建一个获取请求,该请求返回每个团队最近创建的员工。
显然,我可以迭代团队,然后运行第二个请求,找到该团队的最新员工,但如果有数百个团队和数千名员工的潜力,这可能会非常繁重。
任何想法都非常感激。
丹
答案 0 :(得分:1)
正确的sortDescriptor
和设置为fetchBatchSize
的{{1}}应该可以解决问题。
1
编辑:此时我终于明白了这个问题:如何让每个团队中的最新员工。
我认为只用一个NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Employee"];
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]];
fetchRequest.fetchBatchSize = 1;
NSError *error = nil;
NSArray *results = [context executeFetchRequest:fetchRequest error:&error];
就可以做到这一点。但是如果你考虑一下,这是合乎逻辑的。
fetchRequest
首先添加所有NSFetchRequest *allTeamsFetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Team"];
allTeamsFetchRequest.returnsObjectsAsFaults = YES;
NSArray *teams = [context executeFetchRequest:allTeamsFetchRequest error:&error];
NSMutableArray *newPlayers = [NSMutableArray array];
for (NSManagedObject *team in teams) {
NSFetchRequest *newPlayerFetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Employee"];
newPlayerFetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]];
newPlayerFetchRequest.fetchBatchSize = 1;
NSArray *players = [context executeFetchRequest:newPlayerFetchRequest error:&error];
[newPlayers addObjectsFromArray:players];
}
个对象,请注意,对于此任务,我们可以使用Team
,无需获取关系。然后对于每个fault
,我们得到最新的玩家。这不是“一线”解决方案,但它确实起到了作用。