我正在尝试使用Objective-C重新创建一个has_many:through关系(就像在Rails中一样),如果Core Data由SQLite支持,这一定是可能的吗? <rant>
我可以在2秒内为此编写原始SQL ... </rant>
无论如何,基本上这里是我的架构的一个子集:TutorGroup ----&lt;分配&gt; ----类别,我需要获得的是分配给特定教师组的所有类别。
到目前为止,这是我的查询:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(Allocation, $row, $row.tutor_group == %@ AND $row.category == <CURRENT_ROW>).@count > 0)", tutor_group];
有没有办法在子查询中表示当前行的对象(我写的是<CURRENT_ROW>
?我尝试过使用self
,但这不起作用。
另外,我假设我在哪里放Allocation
是我想要执行子查询的表名?
干杯。
答案 0 :(得分:2)
CoreData中的标准方法是拥有所有反向关系。然后你根本不必使用谓词。
确实建议采用反比关系......请参阅this official document.
假设实体TutorGroup
具有多对多关系allocations
,Allocation
具有一对一关系category
。
然后
NSArray* categories = [tutor_group.allocations valueForKeyPath:@"@distinctUnionOfObjects.category"];
请参阅集合运算符here的讨论。
通常,在使用Core Data时,不应使用SQLite支持CoreData的知识。这让你安心。
答案 1 :(得分:2)
我不确定它会起作用,但试试这个:
ANY Allocation.TutorGroup = %@
然后使用predicateWithFormat传入您的教师组,并在Category上运行它。