#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. Большое вам спасибо! Это очень помогло! Ценю это