iphone - Core Data, filtering out child entities in result set -
so have typical 1:m relationship:
car can have many models
i want car objects , model names begin 'a'.
i tried subquery:
nsfetchrequest *fetchrequest = [[nsfetchrequest alloc] init]; nsentitydescription *entity = [nsentitydescription entityforname:@"car" inmanagedobjectcontext:_context]; [fetchrequest setentity:entity]; nspredicate *predicate = [nspredicate predicatewithformat:@"subquery(models, $model, $model.name beginswith 'a').@count > 0"]; [fetchrequest setpredicate:predicate];
this return car
long has model begins 'a'. that's fine, car
s returned, returns model
s, , want ones start 'a'
but seems long operate on higher level entity (car), subquery filters cars
, doesn't filter models
@ all.
what i'm doing filtering models
in inner loop (using nspredicate
), i'd rather filtering on sql side.
ideas?
run fetch against models
entity predicate:
[nspredicate predicatewithformat:@"name beginswith 'a'"];
from result array, nsarray *result
, can of cars
kvc:
[result valueforkey:@"car"];
assuming have 1:1 inverse relationships 1:m cars
models
relationship (you should, way; core data uses inverse relationships maintain consistency of object graph).
if want set of unique cars
:
[result valueforkeypath:@"@distinctunionofobjects.car"];
or
nsset *cars = [nsset setwitharray:[result valueforkey:@"car"]];
Comments
Post a Comment