【问题标题】:How To Create Flutter Moor Relationship With One-To-Many Join如何通过一对多连接创建 Flutter Moor 关系
【发布时间】:2020-02-16 19:01:40
【问题描述】:

我有一个表类别,它与一对多关系中的任务表相关,我正在尝试使用 Moor 执行连接。

我想返回一个与类别匹配的任务列表。我该怎么做?

      Stream<List<CategoryWithTask>> watchAllCategories() {
        return (select(categories)
              ..orderBy(([
                (c) => OrderingTerm(expression: c.name),
              ])))
            .join([leftOuterJoin(tasks, tasks.categoryId.equalsExp(categories.id))])
            .watch()
            .map((rows) => rows.map(
                  (row) {
                    return CategoryWithTask(
                        category: row.readTable(categories),
                        task: row.readTable(tasks)); // How do I modify this line to return a list of tasks corresponding to a category?
                  },
                ).toList());
      }

【问题讨论】:

  • 来自 Moor Readme.md 文件,“如果您有任何问题、反馈或想法,请随时创建问题”github.com/simolus3/moor/issues/new
  • 您的代码似乎没问题。你确定这没有给出预期的输出吗?
  • @AugustinR,我的初始代码是处理连接的单个条目。在 Moor Flutter 支持的帮助下,我成功了,请参阅我的最新回复。

标签: flutter-moor


【解决方案1】:

在 Github 上创建问题后,我设法在 Flutter Moor 人员的支持下找到了一种方法。以下是工作代码;

  Stream<List<CategoryWithTasks>> watchAllCategories() {
    return (select(categories)
          ..orderBy(([
            (c) => OrderingTerm(expression: c.name),
          ])))
        .join([leftOuterJoin(tasks, tasks.categoryId.equalsExp(categories.id))])
        .watch()
        .map((rows) {
          final groupedData = <Category, List<Task>>{};

          for (final row in rows) {
            final category = row.readTable(categories);
            final task = row.readTable(tasks);

            final list = groupedData.putIfAbsent(category, () => []);
            if (task != null) list.add(task);
          }

          return [
            for (final entry in groupedData.entries)
              CategoryWithTasks(category: entry.key, tasks: entry.value)
          ];
        });
  }

【讨论】:

  • 嗨,如果您要从类别表中检索任务表中的名称,并将其显示在列表中。怎么办?
  • 更快的版本是从categoryId 到CategoryWithTasks 的映射。
  • 如何对自己做同样的事情,例如对它的父/子进行分类,例如这里stackoverflow.com/questions/66734984/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 2014-09-12
  • 1970-01-01
  • 2018-06-14
相关资源
最近更新 更多