1

我需要一些数据库帮助。

我有以下表格:

表

我需要从 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

4

1 回答 1

1

假设我们有名为 events、eventTypes 和 users 的表,我们可以将 join 编写为:

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});
}
于 2020-10-16T22:41:36.950 回答