Master Data - Following Keys

I am new to Core Data and stumbled on the correct way to configure the query.

My managed object model includes the Apartment, Lease classes, and what I would otherwise call a join table called ApartmentLease. It looks like this:

/-----------------\      /-----------------\      /-----------------\
| Apartment       |      | ApartmentLease  |      | Lease           |
|-----------------|      |-----------------|      |-----------------|
| number          |      | startOn         |      | occupantName    |
|-----------------|      | endOn           |      | monthlyRate     |
| apartmentLeases |-\    |-----------------|      | occupantPhone   |
\-----------------/  \->>| apartment       |      |-----------------|
                         | lease           |<<----|apartmentLeases  |
                         \-----------------/      \-----------------/

So, I tried to simulate that Leasing can have many apartments, and each apartment for rent has its own start and end dates.

So my question is: Given the date range, how can I request the Apartment object and return an array of all the leases that occupied the Apartment during this date range?

Thank you and sorry for my awful ASCII art!

Bert

+3
source share
2 answers

"" "ApartmentLease".

[NSPredicate predicateWithFormat:@"startOn <= %@ && endOn >= %@", referenceDate, referenceDate];

, ApartmentLease, :

NSArray *apartments = [apartmentLeaseArray valueForKeyPath:@"@distinctUnionOfObjects.apartment"];

, .

, , . NSFetchRequest, . Core Data , . , , .

0

Marcus S. Zarra , . Core Data .

, . ApartmentLease , , . .

. . , , .

:

Apartment {
    number:int;
    leases<--(optional,cascade)-->>lease.apartment
} 

Lease{
    startOn:date;
    endOn:date;
    occupantName:string;
    monthlyRate:float;
    occupantPhone:string
    apartment<<--(required,nullify)->Apartment.leases
}

Apartment.leases .

NSManageObject *anApartment= // which every apartment whose leases you want to examine
NSPredicate *rangePred=[NSPredicate predicateWithFormat:@"startOn <= %@ && endOn >= %@", startReferenceDate, endReferenceDate];
NSSet *leases=[anAparment valueForkey:@"leases"];
NSSet *leasesInDateRange=[leases filteredSetUsingPredicate:rangePred];

, , , NSManagedObject , . , bool : inForce, . :

-(BOOL) inForce{
    BOOL isInForce;
    NSDate *today=[NSDate now];
    if (self.starOn<today<self.endOn){
        isInForce=YES;
    }else{
        isInForce=NO;
    }
    return isInForce;
}

, , ForForce, , , .

0

Source: https://habr.com/ru/post/1753444/


All Articles