使用领域我设置了2个对象:User
和Question
。
每个用户回答一个问题,这个问题存储在第三个对象中:
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,所以请不要告诉我添加一个。
答案 0 :(得分:3)
您需要更改User
模型,以包含与Answer
的反向关系。这将自动包含user
等于当前用户的所有答案。
然后,您需要查询用户,访问他们的answers
属性并根据问题对其进行过滤。
我创建了这些骨架类,以便我可以测试查询,我知道您的User
和Question
类可能不同,因此更改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)