我有一个教师列表,每个教师都包含一个Student对象列表。每个学生都包含他每天必须携带的教科书清单。它看起来像这样:
Teacher {
String teacherName;
RealmList<Student> students = new RealmList<>();
}
Student {
String studentName;
RealmList<SchoolDay> schooldays = new RealmList<>();
}
SchoolDay {
String day;
RealmList<RealmString> schoolbooks;
}
(RealmString只是原始的String
包裹为RealmObject
)
我想在某一天为某个学生提取教科书清单 - 几个学生可能会有相同的教科书,但我只对某一个特定学生的书籍感兴趣(例如,周日) )。一个学生可能在几个老师的班级,但我只对其中一个的结果感兴趣,因为每个书的每周书单都不同。示例查询数据可能是:
teacher : steven
student : austin
day : sunday
这是我被困的地方 - 我如何查询这个?为了得到我感兴趣的老师:
RealmResults<Teacher> = realm.where(Teacher.class).equalTo("teacherName", "steven").findAll();
然而,我必须在教师和学生的子查询上运行子查询 - 或者更好的是,以某种方式在同一查询中运行所有这些子查询。我想得到的是我的最终结果只是表示该特定学生的教科书的字符串。我怎么能这样做?
答案 0 :(得分:4)
我会提出一个更简单的选择。
模型看起来像:
Teacher {
String teacherName;
RealmList<Student> students = new RealmList<>();
}
Student {
String studentName;
RealmList<SchoolDay> schooldays = new RealmList<>();
@LinkingObjects("students")
final RealmResults<Teacher> teacher = null;
}
SchoolDay {
String day;
RealmList<SchoolBook> schoolbooks;
@LinkingObjects("schooldays")
final RealmResults<Student> student = null;
}
SchoolBook {
String bookName;
@LinkingObjects("schoolbooks")
final RealmResults<SchoolDay> day = null;
}
查询将如下:
RealmResults<SchoolBook> = realm
.where(SchoolBook.class)
.equalTo("day.student.studentName", "austin")
.findAll();
答案 1 :(得分:2)
你能尝试那样:
realm.where(Teacher.class)
.equalTo("teacherName",teachername)
.equalTo("students.studentName",studentname)
.equalTo("students.schooldays.day",day).findAll();
毕竟你有教师对象,你可以在一个查询中获得变量:
RealmResults<Teacher> teachers= your query above;
for(Teacher teacher:teachers){
//remember still you can have multiple students for given teacher
for(Student student:teacher.getStudents()){
for(Schoolday schoolday:student.getSchooldays()){
schoolday.schoolbooks bla bla bla...
}
}
}
为什么我们使用for循环:因为findAll()
方法可以返回多个结果,如果您希望单个教师对象使用findFirst()
这将返回给定的 teachername 属性的教师,其中包含/包含具有给定学生姓名的学生:studentname
,并且这些学生的学习时间为:天名。
我认为最后的解释有点难以理解,现在我用例子来解释:
您可以查看以下问题:how-to-make-a-nested-query-in-realm
此问题也适用于引用;这对我很有帮助:realm-android-nested-query