Realm IN基于联结表的查询

时间:2015-11-16 19:00:33

标签: ios swift realm

在我的Realm数据库中,我有3个对象:BodyPartExercise& Muscle

BodyPartExercise都有Muscle的集合,在其领域定义中声明为let muscles = List<Muscle>()

我要做的是检索给定Exercise的所有BodyPart个对象。在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

那么在Realm中实现这一目标的最简单方法是什么?

1 个答案:

答案 0 :(得分:1)

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

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

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

class Muscle: Object {
}

您想要从给定的BodyPart走到与Exercises共享Muscle的{​​{1}}吗?

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

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