【问题标题】:join data from 2 tables into one class将 2 个表中的数据连接到一个类中
【发布时间】:2020-10-17 06:48:16
【问题描述】:

我需要一些数据库帮助。

我有以下表格:

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

【问题讨论】:

    标签: flutter dart flutter-moor


    【解决方案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});
    }
    

    【讨论】:

    • 非常感谢!这帮助了很多!欣赏它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多