You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 21:28:11