class TeacherModel {
TeacherModel({
this.students,
});
factory TeacherModel.fromJson(Map<String, dynamic> json) {
/// implement from json
return TeacherModel(students: []);
}
/// all the properties of teacher
List<StudentModel>? students;
Map<String, dynamic> toJson() => {};
}
class StudentModel {
StudentModel();
/// all the properties of student
factory StudentModel.fromJson(Map<String, dynamic> json) {
return StudentModel();
}
Map<String, dynamic> toJson() => {};
}
建立模型后,您有两个选项。 1-如下所示获取流中的所有数据。
static Stream<List<TeacherModel>> getStreamData() async* {
final firestore = FirebaseFirestore.instance;
var allTeachers = <TeacherModel>[];
final result = firestore.collection('teachers').snapshots();
await for (final r in result) {
final teacherDocs = r.docs;
for (final teacherDoc in teacherDocs) {
final students = (await firestore
.collection('teachers/${teacherDoc.id}/students')
.get())
.docs
.map((e) => StudentModel.fromJson(e.data()))
.toList();
final teacher = TeacherModel.fromJson(teacherDoc.data());
teacher.students = students;
allTeachers.add(teacher);
yield allTeachers;
}
}
}
2-按以下方式获取未来的所有数据。
static Future<List<TeacherModel>> getFutureData() async {
final firestore = FirebaseFirestore.instance;
var allTeachers = <TeacherModel>[];
final result = (await firestore.collection('teachers').get()).docs;
for (final r in result) {
final students =
(await firestore.collection('teachers/${r.id}/students').get())
.docs
.map((e) => StudentModel.fromJson(e.data()))
.toList();
final teacher = TeacherModel.fromJson(r.data());
teacher.students = students;
allTeachers.add(teacher);
}
return allTeachers;
}
我在研究一个解决方案,你必须像@Sparko推荐的那样有创意。在firestore文档中他们这样说: “Cloud Firestore服务器客户端库的listCollections()方法列出了文档引用的所有子集合。 无法使用移动的/Web客户端库检索收藏集列表。应仅在受信任的服务器环境中将查找收藏集名称作为管理任务的一部分。如果发现在移动/Web客户端库中需要此功能,请考虑重新构建数据,以便子收藏集名称可预测。” This is also a possible work around
3条答案
按热度按时间km0tfn4u1#
您正在寻找的是一个集合组查询,它允许您从具有特定名称的所有集合中读取/查询文档。
根据文档:
mbskvtky2#
为了达到这个目的,你需要查询所有的教师,然后在每个教师里面查询所有的学生。我已经实现了,所以我和你分享我的经验。首先,为了方便你,用json序列化制作两个模型TeacherModel和StudentModel。我已经创建了虚拟模型,你可以在模型中添加你的字段。
建立模型后,您有两个选项。
1-如下所示获取流中的所有数据。
2-按以下方式获取未来的所有数据。
f2uvfpb93#
我在研究一个解决方案,你必须像@Sparko推荐的那样有创意。在firestore文档中他们这样说:
“Cloud Firestore服务器客户端库的listCollections()方法列出了文档引用的所有子集合。
无法使用移动的/Web客户端库检索收藏集列表。应仅在受信任的服务器环境中将查找收藏集名称作为管理任务的一部分。如果发现在移动/Web客户端库中需要此功能,请考虑重新构建数据,以便子收藏集名称可预测。”
This is also a possible work around