基于联结点的 Realm IN 查询 table
Realm IN query based on junction table
在我的领域数据库中,我有 3 个对象:BodyPart
、Exercise
和 Muscle
BodyPart
和 Exercise
都有一个 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
走到与其共享 Muscle
的 Exercises
?
您可以使用 linkingObjects(_:forProperty:)
从 Muscle
实例返回到引用它的 Exercise
。它可能看起来像这样:
extension BodyPart {
var exercises: [Exercise] {
return muscles.flatMap { [=11=].linkingObjects(Exercise.self, forProperty: "muscles") }
}
}
在我的领域数据库中,我有 3 个对象:BodyPart
、Exercise
和 Muscle
BodyPart
和 Exercise
都有一个 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
走到与其共享 Muscle
的 Exercises
?
您可以使用 linkingObjects(_:forProperty:)
从 Muscle
实例返回到引用它的 Exercise
。它可能看起来像这样:
extension BodyPart {
var exercises: [Exercise] {
return muscles.flatMap { [=11=].linkingObjects(Exercise.self, forProperty: "muscles") }
}
}