我有一个具有以下结构的模型:
命令属于Document
文档有很多标记
这很重要,因为此类关系使用了附加表
Tag还有一个type属性,它是一个整数,是一个枚举。
我尝试实现的是在单个查询中向CoreData请求属于与TagTypeUnwanted类型的标记没有关系的Documents的命令:)
我尝试使用谓词创建子查询:
[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中都会被删除。因此,它总是会找到至少一个类型为非类型TagTypeUnwanted的记录。
如果您想了解更多信息或生成SQL或其他内容,请将其写入评论中。提前谢谢!
看起来没有任何和NONE都没有在Core Data中工作,只要我能够检查它是自2007年以来的一个已知问题,通常你做子查询来解决这个问题,但看起来像子查询在这种情况下不能处理多对多表
NOT ANY生成:AND NOT(Tag.type == TagTypeUnwanted)所以它只接近SQL的外观
答案 0 :(得分:1)
这可能不是很有效,但以下嵌套的SUBQUERY似乎有用可能很有趣:
[NSPredicate predicateWithFormat:
@"SUBQUERY(document, $doc, SUBQUERY($doc.tags, $tag, $tag.type == %d).@count == 0) != NULL",
TagTypeUnwanted]