渡槽中的多对多查询联接

时间:2018-08-22 17:09:02

标签: aqueduct

我有A-> AB <-B 2个ManagedObjects(A和B)之间的多对多关系,其中AB是联结表。

从数据库查询A时,如何将B值连接到AB关节对象?

run-android

它给了我一个包含AB关节对象的A对象的列表,但是AB对象不包括完整的B对象,而仅包括b.id(不包括B类的其他字段)。

欢呼

1 个答案:

答案 0 :(得分:1)

调用join时,将创建一个新的Query<T>并从该方法返回,其中T是联接类型。因此,如果a.ab的类型为AB,则Query<A>.join返回Query<AB>(它在内部链接到原始查询)。

由于有了新的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();