ios - 基于联结表的 Realm IN 查询

标签 ios swift realm

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

两者都是 BodyPartExercise收藏了 Muscle s,声明为 let muscles = List<Muscle>()在他们的 Realm 定义中

我想做的是检索所有 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 中实现这一目标的最简单方法是什么?

最佳答案

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

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 { $0.linkingObjects(Exercise.self, forProperty: "muscles") }
    }
}

关于ios - 基于联结表的 Realm IN 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33742623/

相关文章:

ios - -[__NSArrayI addObject :]: unrecognized selector sent to instance

ios - UIPopoverController 不会初始化 ContentViewController

swift - 如何快速检查对象是否为零?

ios - 应用程序在登录或注册后崩溃,但在我滑动退出并重新打开后可以正常工作

swift - 显示来自网络的现实文件时出错

android - 将非 Realm 对象存储到 Realm 数据库中

ios - 向 UIImagepickercontroller 导航栏添加后退按钮

iphone - 如何在一段时间后触发委托(delegate)方法?

ios - dismissViewControllerAnimated 在 block 内不起作用

xcode - 从 Xcode 中删除 Realm 模型对象