在数据透视表关系上过滤领域

时间:2017-08-17 18:16:40

标签: ios swift swift3 realm

使用领域我设置了2个对象:UserQuestion

每个用户回答一个问题,这个问题存储在第三个对象中:

class Answer : Object {
    dynamic var user: User?
    dynamic var question: Question?
    dynamic var answerText = ""
}

我需要做的是,给出一个用户对象和一个问题对象,获取相关的Answer对象。在半SQL伪代码中类似于:

SELECT FROM Answers WHERE user = User and question = Question

所以...我如何实现这一目标?

如果有一种方法不必获取问题对象而是使用该对象的主键(我有用户对象,但只有一个问题ID,所以我必须先解决问题对象) ,所以像:

SELECT FROM Answers WHERE user = User and question.id = Question.id

另外,因为领域在你需要它之​​前不会将整个对象加载到内存中,所以我认为它不具备这种能力。

注意:我的问题已经简化了一点。有一个很好的理由我没有主要答案ID,所以请不要告诉我添加一个。

1 个答案:

答案 0 :(得分:3)

您需要更改User模型,以包含与Answer的反向关系。这将自动包含user等于当前用户的所有答案。

然后,您需要查询用户,访问他们的answers属性并根据问题对其进行过滤。

我创建了这些骨架类,以便我可以测试查询,我知道您的UserQuestion类可能不同,因此更改primaryKey和问题过滤器以适合您的确切类定义

class User: Object {
    let answers = LinkingObjects(fromType: Answer.self, property: "user")
    dynamic var userName = ""
    override class func primaryKey()->String {
        return "userName"
    }
}

class Answer : Object {
    dynamic var user: User?
    dynamic var question: Question?
    dynamic var answerText = ""
}

class Question: Object {
    dynamic var title = ""
}

let questionId = ""
let questions = realm.object(ofType: User.self, forPrimaryKey: "userName")?.answers.filter("question.id = %@",questionId)