我是Core Data的新手,并且在建立查询的正确方法上受挫。
我的受管对象模型包括Apartment,Lease类,以及我称其为JoinTable的联接表。看起来像:
/-----------------\ /-----------------\ /-----------------\
| Apartment | | ApartmentLease | | Lease |
|-----------------| |-----------------| |-----------------|
| number | | startOn | | occupantName |
|-----------------| | endOn | | monthlyRate |
| apartmentLeases |-\ |-----------------| | occupantPhone |
\-----------------/ \->>| apartment | |-----------------|
| lease |<<----|apartmentLeases |
\-----------------/ \-----------------/
因此,我试图建模的是一个租赁可以有许多公寓,并且租赁中的每个公寓都有其自己的开始和结束日期。
所以我的问题是:给定一个日期范围,我如何查询Apartment对象并获取在该日期范围内占用该Apartment的所有租赁的数组?
感谢和对不起,我的ASCII艺术糟透了!
伯特
最佳答案
而不是查询Apartment实体,而是查询ApartmentLease实体。
[NSPredicate predicateWithFormat:@"startOn <= %@ && endOn >= %@", referenceDate, referenceDate];
然后,一旦有了ApartmentLease实体数组,就可以通过以下方式检索公寓实体:
NSArray *apartments = [apartmentLeaseArray valueForKeyPath:@"@distinctUnionOfObjects.apartment"];
现在,您有了一系列符合搜索条件的Apartment实体。
更新
如果您已经有该公寓的参考,则只需获取该套公寓的租赁,然后针对该套租赁过滤包含日期的租赁。如果您已经拥有公寓,则没有理由通过NSFetchRequest。将核心数据视为对象图,而不是数据库。所有关系都已经预先填充,您无需获取它们,只需遍历对象图即可。
关于cocoa - 核心数据-遵循关键路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3191227/