我有一个具有以下结构的模型:
- 文档实体有很多命令
命令属于文档
文档有很多标签
- 标签有很多文档
这很重要,因为用于此类关系的附加表
Tag 还有一个 type 属性,它是一个整数,是一个枚举。
我试图实现的是向 CoreData 询问属于 Documents 的命令,这些命令与 TagTypeUnwanted 类型的标签没有关系,显然是在单个查询中:)
我尝试使用谓词进行子查询:
[NSPredicate predicateWithFormat:@"SUBQUERY(document.tags, $tag, $tag.type == %d).@count == 0", TagTypeUnwanted]
不幸的是,它试图加入管理 Document 和 Tag 之间关系的中间表。所以它导致抱怨它在那里找不到归档的“类型”,因为它只有 Document id 和 Tag id,这不是我所期望的。看起来它适用于除多对多之外的所有其他关系,但在这种情况下它已经丢失了。
[NSPredicate predicateWithFormat:@"NOT ANY document.tags.type == %d", TagTypeUnwanted]
这个也不起作用,因为它只在 SQL 中留下 NOT ,并且由于与许多类型的标签的关系,它会在找到的每个 Document 中重新出现。所以它总是会找到至少一个类型不是类型 TagTypeUnwanted 的记录。
如果您喜欢更多信息或生成的 SQL 或任何内容,只需将其写在评论中即可。提前致谢!
看起来 NOT ANY 和 NONE 都不能在 Core Data 中工作,据我所知,这是自 2007 年以来的一个已知问题,通常你会做子查询来解决这个问题,但在这种情况下,子查询似乎无法处理很多 -对多表
NOT ANY 生成: AND NOT (Tag.type == TagTypeUnwanted) 所以它只接近 SQL 的实际外观