首页 > 解决方案 > 具有多重关系的核心数据子查询

问题描述

在此处输入图像描述这是我的核心数据库表的结构。想在谓词中创建子查询,下面是查询的描述。

生成所有唯一的提交,其中 SubmisisonField.value 与数组匹配。此查询顶部的图像。

对于具有员工表请求的第二张图像:生成所有 ActivityFeedCard,其中员工姓名与字符串匹配。现在 Employee 中的 id 字段与 SubmissionField.value 的字段相同,或者我们可以说 SubmissionField.value == Employee.id。我们必须按员工的名字、姓氏等进行搜索,非常感谢。 数据库结构

 let fetchCardsContext = CoreDataManager.shared.getNewBackgroundContext(name: "Fetch Cards for display BG Context")
        var predicate: NSPredicate?
        self.displayedCards.removeAll()
        predicate = NSPredicate(format: "SUBQUERY(submission.submissionTemplate.submissionField.value, $v, $v IN %@).@count > 0", empArray)
        self.displayedCards = ActivityFeedCard.fetchAndSort(in: fetchCardsContext, predicate: predicate, sortOptions: nil) ?? [ActivityFeedCard]()

标签: iosswiftcore-data

解决方案


您想“生成所有唯一的提交”。所以获取请求应该基于Submission实体。相对于Submission实体,submissionTemplate.submissionField.value是一个集合(因为submissionField关系是对多的)。您只想在 fetchSubmission中包含集合“与数组匹配”的那些对象。假设您的意思是“如果集合和数组有任何共同的值”,那么要使用的谓词是:

NSPredicate(format:"SUBQUERY(submissionTemplate.submissionField.value, $v, $v IN %@).@count > 0",yourArray)

或者用一句话来说:“ count(值,,,$v来自作为数组的submissionTemplate.submissionField.value集合的集合IN)大于零”。


推荐阅读