Flutter Isar-ORM:如何获取Teacher集合的关联Student链接数据
Isar中通过Backlink获取关联Student数据的方法
先看你定义的Teacher集合:
@collection class Teacher { Id id; late String subject; @Backlink(to: 'teacher') final student = IsarLinks<Student>(); }
你尝试用以下代码获取关联的Student数据:
teacher = isarInstance.collection<Teacher>().where().findFirstSync(); print(teacher.student);
但直接这么写可能无法拿到实际的Student数据——因为Isar默认不会自动加载关联的链接数据,要获取树形结构的关联数据,有两种可靠方式:
方法一:手动加载关联数据
拿到Teacher实例后,调用链接的loadSync()(异步场景用load())方法主动加载关联数据:
final teacher = isarInstance.collection<Teacher>().where().findFirstSync(); // 加载关联的Student列表 teacher.student.loadSync(); // 此时可正常访问所有关联的Student print(teacher.student);
方法二:查询时预加载关联数据
在查询Teacher的阶段,用include()方法指定预加载Backlink关联的Student数据,这样获取到Teacher实例时,关联数据已经加载完成:
final teacher = isarInstance.collection<Teacher>() .where() .include([Teacher.student]) // 预加载student链接 .findFirstSync(); // 直接访问关联数据,无需额外加载 print(teacher.student);
关键注意点
- 必须确保Student集合中存在对应的
teacher字段(类型为IsarLink<Teacher>),@Backlink(to: 'teacher')正是基于这个字段建立反向关联的:@collection class Student { Id id; late String name; // 与Teacher的Backlink对应 final teacher = IsarLink<Teacher>(); } - 如果使用异步查询方法(如
findFirst()),对应使用异步加载方法await teacher.student.load(),预加载的写法保持一致。
内容的提问来源于stack exchange,提问作者DolDurma
相关产品推荐
相关产品推荐

