我在 2 个 ManagedObjects(A 和 B)之间有 A -> AB <- B 多对多关系,其中 AB 是联结表。
从 db 查询 A 时,如何将 B 值连接到 AB 关节对象?
Query<A> query = await Query<A>(context)
..join(set: (a) => a.ab);
它给了我一个包含 AB 关节对象的 A 对象列表,但 AB 对象不包括完整的 B 对象,而只有 b.id(不包括 B 类的其他字段)。
干杯
我在 2 个 ManagedObjects(A 和 B)之间有 A -> AB <- B 多对多关系,其中 AB 是联结表。
从 db 查询 A 时,如何将 B 值连接到 AB 关节对象?
Query<A> query = await Query<A>(context)
..join(set: (a) => a.ab);
它给了我一个包含 AB 关节对象的 A 对象列表,但 AB 对象不包括完整的 B 对象,而只有 b.id(不包括 B 类的其他字段)。
干杯
当您调用 时join,会创建一个新Query<T>的并从该方法返回,T连接类型在哪里。因此,如果a.ab是 type AB,则Query<A>.join返回 a Query<AB>(它在内部链接到原始查询)。
由于您有一个 new Query<AB>,您可以像任何其他查询一样对其进行配置,包括启动另一个连接、添加排序描述符和 where 子句。
有一些文体语法可供选择。您可以将此查询压缩为单行:
final query = Query<A>(context)
..join(set: (a) => a.ab).join(object: (ab) => ab.b);
final results = await query.fetch();
如果查询保持原样,这是可以的,但是当您向查询添加更多条件时,点运算符和级联运算符之间的差异变得难以跟踪。我经常将连接查询拉入它自己的变量中。(请注意,您不会在联接查询上调用任何执行方法):
final query = Query<A>(context);
final join = query.join(set: (a) => a.ab)
..join(object: (ab) => ab.b);
final results = await query.fetch();