2015-11-16 29 views
0

在我的境界数据库中,我有3个对象:BodyPartExercise & Muscle境界IN查询基于结表

两个BodyPartExerciseMuscle秒的集合,在他们的领域宣布为let muscles = List<Muscle>()定义

我试图做的是检索给定BodyPart的所有Exercise对象。在SQL我可能会做沿着这些路线的东西:

select e.* 
    from Exercise e 
     inner join ExerciseMuscle em 
       on e.ExerciseID = em.ExerciseID 
     inner join BodyPartMuscle bpm 
       on em.MuscleID = bpm.MuscleID 
where bpm.BodyPartID = 1 

那么这将是在领域实现这一目标的最简单的方法?

回答

1

如果我理解正确的话,你的模型看起来像:

class Exercise: Object { 
    let muscles = List<Muscle>() 
} 

class BodyPart: Object { 
    let muscles = List<Muscle>() 
} 

class Muscle: Object { 
} 

你想从给定BodyPart到与它共享Muscle S中Exercises走路吗?

您可以使用linkingObjects(_:forProperty:)Muscle实例走回Exercise s引用它。它可能看起来像这样:

extension BodyPart { 
    var exercises: [Exercise] { 
     return muscles.flatMap { $0.linkingObjects(Exercise.self, forProperty: "muscles") } 
    } 
} 
+0

谢谢,这是完美的工作。虽然我在'BodyPart'上'''''''''''''''''''''''''''''''''''''''''''''''''''但很明显,这并不重要,它可以工作:p – CrazyHorse

+0

作为对此的进一步问题,是否有可能在'filter'中引用'exercise'属性。我最喜欢的是说'bodyPartsResults = realm.objects(BodyPart).filter(“exercises.Count> 0”)''但我得到一个运行时错误,说'属性'练习'找不到'BodyPart类型的对象'' – CrazyHorse

+0

不,这不是Realm支持的。如果您可以在https://github.com/realm/realm-cocoa/issues/new上提交增强请求,我们将非常感激,以便我们可以跟踪未来的添加。 – bdash