gpt4 book ai didi

objective-c - CoreData 多对多关系(子)查询

转载 作者:行者123 更新时间:2023-11-29 04:17:26 26 4
gpt4 key购买 nike

我有一个具有以下结构的模型:

  • 文档实体有很多命令
  • 命令属于文档

  • 文档有很多标签

  • 标签有很多文档

这很重要,因为此类关系使用了附加表

标签还有一个类型属性,它是一个整数,是一个枚举。

我试图实现的是向 CoreData 询问属于文档的命令,这些命令与 TagTypeUnwanted 类型的标签没有关系,显然是在单个查询中:)

我尝试使用谓词创建子查询:

[NSPredicate predicateWithFormat:@"SUBQUERY(document.tags, $tag, $tag.type == %d).@count == 0", TagTypeUnwanted]

不幸的是,它尝试与管理文档和标签之间关系的中间表连接。所以它会导致提示它在那里找不到归档的“类型”,因为它只有文档 ID 和标签 ID,这不是我所期望的。看起来它适用于除多对多之外的所有其他关系,但在这种情况下它丢失了。

[NSPredicate predicateWithFormat:@"NOT ANY document.tags.type == %d", TagTypeUnwanted]

这个也不起作用,因为它只在 SQL 中留下 NOT,并且由于与许多类型的标签的关系,它会在找到的每个文档中发生。因此,它总是会找到至少一条类型不是 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]

关于objective-c - CoreData 多对多关系(子)查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13489874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com