我有一个表类别,该表类别与任务表具有一对多关系,并且我尝试使用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());
}
答案 0 :(得分:9)
在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)
];
});
}