从过滤关系为空的核心数据中获取对象
Fetch objects from Core Data where a filtered relationship is empty
假设我有 Employee
个对象,它们与名为 shifts
的 WorkShift
个对象具有一对多关系。 WorkShift
有一个 startDate
属性 标记该转变何时开始。
我想获取所有未在两个日期之间开始工作的员工,即如果 Employee
在 A 和 B 日期之间有 0 WorkShift
条记录 startDate
,然后我想将 Employee
包含在我的结果集中。
如果我只需要找到shifts
完全为空的员工,我相信我可以只使用shifts.@count = 0
的谓词,但我需要根据[过滤shifts
=14=] 然后检查 @count = 0
,但我不知道如何在谓词中执行此操作。
有什么建议吗?
我根据其他一些讨论 SUBQUERY
的帖子设法弄明白了
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"SUBQUERY(shifts, $x, %@ <= $x.startDate and $x.startDate <= %@).@count == 0",
beginningOfDateRange, endingOfDateRange);
SUBQUERY
函数将所讨论的关系(集合)作为第一个参数。第二个参数只是一个变量定义,表示当我在第三个参数中构建条件时,我将使用 $x
来引用关系集合中的每个项目。然后,当然,第三个参数是我用来减少集合的过滤器。我正在寻找我的两个日期之间 startDate
的 WorkShift
记录..但是我想要所有 Employees
没有的记录,所以我使用子查询来查找所有该范围内的 WorkShift
记录,然后我检查 .@count == 0
以确保该范围内没有任何记录。
有点费脑筋,但效果很好。
假设我有 Employee
个对象,它们与名为 shifts
的 WorkShift
个对象具有一对多关系。 WorkShift
有一个 startDate
属性 标记该转变何时开始。
我想获取所有未在两个日期之间开始工作的员工,即如果 Employee
在 A 和 B 日期之间有 0 WorkShift
条记录 startDate
,然后我想将 Employee
包含在我的结果集中。
如果我只需要找到shifts
完全为空的员工,我相信我可以只使用shifts.@count = 0
的谓词,但我需要根据[过滤shifts
=14=] 然后检查 @count = 0
,但我不知道如何在谓词中执行此操作。
有什么建议吗?
我根据其他一些讨论 SUBQUERY
的帖子设法弄明白了NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"SUBQUERY(shifts, $x, %@ <= $x.startDate and $x.startDate <= %@).@count == 0",
beginningOfDateRange, endingOfDateRange);
SUBQUERY
函数将所讨论的关系(集合)作为第一个参数。第二个参数只是一个变量定义,表示当我在第三个参数中构建条件时,我将使用 $x
来引用关系集合中的每个项目。然后,当然,第三个参数是我用来减少集合的过滤器。我正在寻找我的两个日期之间 startDate
的 WorkShift
记录..但是我想要所有 Employees
没有的记录,所以我使用子查询来查找所有该范围内的 WorkShift
记录,然后我检查 .@count == 0
以确保该范围内没有任何记录。
有点费脑筋,但效果很好。