谓词的“此处不允许多对多键”问题

Posted

技术标签:

【中文标题】谓词的“此处不允许多对多键”问题【英文标题】:"multiple to-many keys not allowed here" issue with a predicate 【发布时间】:2014-07-02 14:09:01 【问题描述】:

我需要一些关于 NSFetchedResultsController 谓词的帮助。我的猜测是可以使用SUBQUERY 来完成,但我不知道怎么做。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Album"];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"ANY tracks.playlistItems.playlist == %@", section.playlist];

使用此谓词执行获取请求时,我收到“此处不允许多对多键”错误。这是有道理的,因为专辑有多个曲目,而一个曲目有多个播放列表项。

因此,在这里使用自然语言是我想要从这个谓词中得到的:一张专辑,其中至少一首曲目至少有一个 playlistItems 具有以下播放列表。

我可以在我的谓词中使用 SUBQUERY 来实现这一点吗?

(我知道这可以使用 2 个获取请求轻松实现,但我想知道这是否可以使用一个请求来完成,因为我使用的是 NSFetchedResultsController

【问题讨论】:

【参考方案1】:

是的,您可以使用 SUBQUERY 执行此操作。我只使用过几次子查询,但我认为你的应该是这样的:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(tracks, $t, ANY $t.playlistItems.playlist == %@).@count != 0", section.playlist];

【讨论】:

以上是关于谓词的“此处不允许多对多键”问题的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 多对多谓词(再次)

具有多对多谓词的核心数据

CoreData 谓词 ANY + AND 与多对多关系

在 MySQL 中,对于连接谓词之间具有多对多关系的大型表,最有效的查询设计是啥?

NSSortDescriptor 和多对多关系

具有多对多关系的 NSPredicate