基于联结点的 Realm IN 查询 table

Realm IN query based on junction table

在我的领域数据库中,我有 3 个对象:BodyPartExerciseMuscle

BodyPartExercise 都有一个 Muscle 的集合,在它们的领域定义中声明为 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

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

如果我没理解错的话,你的模型看起来像这样:

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

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

class Muscle: Object {
}

并且您想从给定的 BodyPart 走到与其共享 MuscleExercises

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

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