объединение данных из 2 таблиц в один класс

#flutter #dart #flutter-moor

#flutter #dart #flutter-moor

Вопрос:

Мне нужна помощь с базой данных.

У меня есть следующие таблицы:

Таблицы

Мне нужно извлечь событие с данными из таблицы EventType для назначения и событие, у которого EventType связан с пользователем.

Я использую Moor, и они обслуживают объединения, мне просто нужна помощь с запросом. В настоящее время я пытаюсь это:

 Stream<EventWithType> eventWithType(EventData eventTypeId) {
  final query = select(event)
    ..where((tbl) {
      return tbl.id.equals(eventTypeId.id);
    })
   ..join([
     innerJoin(eventType, eventType.id.equals(eventTypeId.eventTypeId)),
   ]);
 }
  

EventWithType.dart

 class EventWithType {

  final EventData event;
  final EventTypeData eventTypeData;

  EventWithType(this.event, this.eventTypeData);
  
}
  

но я знаю, что делаю что-то не так, я просто не уверен, как выполнять объединения, или даже если я использую правильное соединение?

TIA x10sion

Ответ №1:

Предположим, у нас есть такие таблицы с именами events, EventTypes amp; users, мы можем записать объединение как:

 Stream<JoinedEvent> getJoinedEvent(eventId) {
  final query = (select(events)
    ..whereSamePrimaryKey(EventsCompanion(id: Value(eventId))))
      .join([
    innerJoin(eventTypes, eventTypes.id.equalsExp(events.eventTypeId)),
    innerJoin(users, users.id.equalsExp(events.userId)),
  ]);
  return query.watchSingle().map((typedResult) {
    return JoinedEvent(
      event: typedResult.readTable(events),
      user: typedResult.readTable(users),
      eventType: typedResult.readTable(eventTypes),
    );
  });
}
  

с:

 class JoinedEvent {
  final Event event;
  final EventType eventType;
  final User user;

  JoinedEvent ({this.event, this.eventType, this.user});
}
  

Комментарии:

1. Большое вам спасибо! Это очень помогло! Ценю это