首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >参数类型'GeneratedIntColumn‘不能分配给参数类型'int':Moor-Flutter

参数类型'GeneratedIntColumn‘不能分配给参数类型'int':Moor-Flutter
EN

Stack Overflow用户
提问于 2019-12-04 08:09:43
回答 1查看 2.1K关注 0票数 3

我试图设置一个外键关系与摩尔-颤振时,连接两个表,我得到下面的错误在VS代码;

参数类型'GeneratedIntColumn‘不能分配给参数类型'int’。

起初,我认为这是因为我正在使用一个自动递增字段作为外键,但现在我不太确定,因为我在更改代码时仍然会遇到错误。

这是我的密码。当比较;tasks.id.equals(categories.taskId)时,join语句会发生错误。

代码语言:javascript
复制
import 'package:moor/moor.dart';
import 'package:moor_flutter/moor_flutter.dart';

part 'moor_database.g.dart';

@DataClassName("Category")
class Categories extends Table {
  IntColumn get id => integer().autoIncrement()();
  IntColumn get taskId =>
      integer().nullable().customConstraint('NULL REFERENCES tasks(id)')();
  TextColumn get name => text().withLength(min: 1, max: 100)();
  TextColumn get icon => text()();
  TextColumn get color => text()();
}

class Tasks extends Table {
  IntColumn get id => integer().autoIncrement()();
  TextColumn get name => text().withLength(min: 1, max: 200)();
  BoolColumn get completed => boolean().withDefault(Constant(false))();
}

@UseMoor(tables: [Categories, Tasks], daos: [CategoryDao])
class AppDatabase extends _$AppDatabase {
  AppDatabase()
      : super((FlutterQueryExecutor.inDatabaseFolder(
          path: 'todo.sqlite',
          logStatements: true,
        )));

  @override
  int get schemaVersion => 1;

  @override
  MigrationStrategy get migration =>
      MigrationStrategy(beforeOpen: (details) async {
        await customStatement('PRAGMA foreign_keys = ON');
      });
}

class CategoryWithTask {
  final Category category;
  final Task task;

  CategoryWithTask({@required this.category, @required this.task});
}

@UseDao(tables: [Categories, Tasks])
class CategoryDao extends DatabaseAccessor<AppDatabase>
    with _$CategoryDaoMixin {
  final AppDatabase db;

  CategoryDao(this.db) : super(db);
  Stream<List<CategoryWithTask>> watchAllCategories() {
    return (select(categories)
          ..orderBy(([
            (c) => OrderingTerm(expression: c.name),
          ])))
        .join([leftOuterJoin(tasks, tasks.id.equals(categories.taskId))])
        .watch()
        .map((rows) => rows.map((row) {
              return CategoryWithTask(
                  category: row.readTable(categories),
                  task: row.readTable(tasks));
            }));
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-04 11:48:58

通过查看来自https://resocoder.com/2019/07/17/moor-room-for-flutter-3-foreign-keys-joins-migrations-fluent-sqlite-database/的代码示例,我意识到了自己的错误

而不是tasks.id.equals(categories.taskId)

联接中的表达式应该是tasks.id.equalsExp(categories.taskId)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59171502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档