1

それぞれが Student オブジェクトのリストを含む Teachers のリストがあります。各生徒には、毎日持参しなければならない教科書のリストが含まれています。次のようになります。

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)

特定の日に特定の生徒の教科書のリストを抽出したい - 何人かの生徒が同じ教科書を持っているかもしれないが、特定の日 (例えば、日曜日) の特定の生徒の本だけに関心がある。生徒は複数の教師のクラスに所属している可能性がありますが、毎週のブックリストは教師ごとに異なるため、そのうちの 1 人の結果にのみ関心があります。サンプル クエリ データは次のようになります。

teacher : steven

student : austin

day     : sunday

これは私が立ち往生する場所です - これをサブクエリするにはどうすればよいですか? 興味のある教師を取得するには:

RealmResults<Teacher> = realm.where(Teacher.class).equalTo("teacherName",  "steven").findAll();

ただし、その後、教師に対してサブクエリを実行し、生徒に対してサブクエリを実行する必要があります。または、それらすべてを同じクエリで実行することをお勧めします。最終結果として取得したいのは、その特定の生徒の教科書を表す文字列です。これどうやってするの?

4

2 に答える 2

2

あなたはそのように試すことができますか:

realm.where(Teacher.class)
.equalTo("teacherName",teachername)
.equalTo("students.studentName",studentname)
.equalTo("students.schooldays.day",day).findAll();

結局、Teacher オブジェクトがあり、1 つのクエリで変数を取得できます。

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()単一の Teacher オブジェクトを使用する場合、メソッドは複数の結果を返すことができるためfindFirst()

これは、指定された生徒名: の生徒を含む/含む指定されたteachernamestudentname属性の教師を返します。これらの生徒には、指定された:曜日名の学校日があります。

最後の説明はかなりわかりにくいと思いますが、例を挙げて説明します。

  1. 最初のクエリでは、name= "Yasin" の教師を取得しています。このクエリの後、「Yasin」という名前の教師が 5 人得られたとします。
  2. 次に、2 番目のクエリで、この 5 人の Yasin 教師を検索します。生徒の名前が「ジョン」の場合。そのクエリの後に 3 人の Yasin 教師がいるとします。
  3. 次に、最後のクエリで、その 3 人の「Yasin」教師を検索します。生徒の登校日が「日曜日」の場合。

この質問を見ることができます:how-to-make-a-nested-query-in-realm

また、この質問は参照に適しています。それは私にとって役に立ちました:realm-android-nested-query

于 2016-08-21T11:06:49.157 に答える