【问题标题】:Filtering realm on pivot table relationship过滤数据透视表关系的领域
【发布时间】:2017-08-17 18:16:39
【问题描述】:

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

每个用户回答一个问题,它存储在第三个对象中,如下所示:

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

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

SELECT FROM Answers WHERE user = User and question = Question

 

那么...我该如何实现呢?

 


 

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

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

另外,因为领域不会将整个对象加载到内存中,直到你需要它,我不认为它有这个能力。

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

【问题讨论】:

    标签: ios swift swift3 realm


    【解决方案1】:

    您需要更改您的 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)
    

    【讨论】:

    • 感谢 Dávid,我不知道我可以如此轻松地过滤 user.id 等相关属性!您的回答使我创建了一个测试应用程序,我发现我可以做到 realm.objects(Answer.self).filter("user.id = %@ AND question.id = %@", 1, 7)。感谢您的帮助
    猜你喜欢
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    相关资源
    最近更新 更多