CoreData多对多关系(子)查询
我有一个具有以下结构的模型:
- 文档实体有许多命令
-
命令属于Document
-
文档有很多标签
- 标签有很多文档
这很重要,因为此类关系使用了额外的表
Tag还有一个type属性,它是一个整数,是一个枚举。
我尝试实现的是在CoreData中查询属于Documents的命令,这些命令与TagTypeUnwanted类型的标记没有关系,显然在单个查询中:)
我试图用谓词创建一个子查询:
[NSPredicate predicateWithFormat:@"SUBQUERY(document.tags, $tag, $tag.type == %d).@count == 0", TagTypeUnwanted]
不幸的是,它试图加入管理Document和Tag之间关系的中间表。 所以它导致抱怨它找不到那里的’type’,因为它只有Document id和Tag id,这不是我的预期。 它似乎适用于除了多对多之外的所有其他关系,在这种情况下它会丢失。
[NSPredicate predicateWithFormat:@"NOT ANY document.tags.type == %d", TagTypeUnwanted]
这个也不起作用,因为它只在SQL中留下NOT,并且它因为与许多类型的标签的关系而在每个被发现的Document中都会被删除。 所以它总会找到至少一个记录,其中type不是类型TagTypeUnwanted。
如果您喜欢更多信息或生成SQL或任何内容,只需将其写在注释中即可。 提前致谢!
看起来像NOT ANY和NONE都没有在Core Data中工作,只要我能够检查它是自2007年以来的一个已知问题,通常你做子查询来解决这个问题,但似乎子查询在这种情况下不能处理很多 – 很多桌子
NOT ANY生成:AND NOT(Tag.type == TagTypeUnwanted)所以它只接近SQL应该看起来的样子
这可能不是很有效,但以下嵌套的SUBQUERY似乎可行有趣:
[NSPredicate predicateWithFormat: @"SUBQUERY(document, $doc, SUBQUERY($doc.tags, $tag, $tag.type == %d).@count == 0) != NULL", TagTypeUnwanted]
- 内部具有垂直UIScrollViews的水平UIScrollView – 如何在滚动外部水平视图时阻止滚动内部滚动视图?
- ios 10中的AVAssetExportSession不适用于iPhone 7
- 与AVAudioPlayer同步播放MPMoviePlayerController
- 将video+生成的audio写入AVAssetWriterInput,audio口吃
- 如何在iPhone中进行无限滚动视图?
- 在iOS文档中使用rfc3339dateFormatter作为示例之后,dateFromString返回nil
- iOS / Objecitve-C UILabel文字字距
- mediaplayer框架不能在iOS 6中播放video
- 多个查询search与Parse.com