Акведук ORM с несколькими вложенными объединениями

Я использую Aqueudct ORM с такими моделями данных:

    A
    |    (one-one)
    B
  / | \  (all many-one)
 C  C  C

а мои таблицы выглядят так:

class _A {
  B b;
}

class _B {
  @Relate(#c1Ref)
  C c1;
  @Relate(#c2Ref)
  C c2;
  @Relate(#c3Ref)
  C c3;
}

class _C {
  ManagedSet<B> c1Ref;
  ManagedSet<B> c2Ref;
  ManagedSet<B> c3Ref;
}

Я хочу написать запрос, чтобы получить большой жир A, но не могу понять.

Пока у меня есть:

final query = Query<A>(context)
  ..join(object: (a) => a.b)
   //Note the non-cascading dot
  .join(object: (b) => b.c1);

Это дает мне A с B, но только с c1. Как мне написать запрос, чтобы я также получил c2 и c3?


person Vedavyas Bhat    schedule 01.09.2019    source источник


Ответы (1)


Метод соединения возвращает новый объект запроса. Этот запрос является дочерним по отношению к исходному запросу и управляет параметрами запроса в объединенной таблице. То есть вы можете применить условие where к новому объекту запроса, который применяется к объединенной таблице. В вашем случае вы хотите сначала назначить новый объект запроса переменной, а затем настроить каждое соединение. Я сейчас использую мобильный телефон, так что, возможно, получится не очень хорошо:

  final query = Query<A>(context);
  final bQuery = query.join(object: (a) => a.b)
       ..join(object: (b) => b.c1)
       ..join(object: ( b) => b.c2)
        ..join(object: (b) => b.c3);

Обратите внимание, что на самом деле вы не добавляли это в переменную здесь, но я сделал это, чтобы проиллюстрировать суть. Здесь вы должны выполнить «запрос», а не «bQuery».

Y

person Joe Conway    schedule 01.09.2019
comment
Да, это работает, спасибо! Моя проблема заключалась в том, что у меня также есть .where на Query<A>, и я не мог добавить объединения до или после него. Я не знал, что .join изменяет сам запрос; Я думал, что он всегда возвращает новый объект запроса. Большое спасибо! - person Vedavyas Bhat; 02.09.2019
comment
Здорово! И да, родительский запрос сохраняет ссылку на вновь созданный объект запроса. - person Joe Conway; 02.09.2019