在我的Realm数据库中,我有3个对象:BodyPart
,Exercise
& Muscle
BodyPart
和Exercise
都有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中实现这一目标的最简单方法是什么?
答案 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") }
}
}