Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite 带有Flatter moor的列名称不明确_Sqlite_Flutter_Dart_Flutter Moor - Fatal编程技术网

Sqlite 带有Flatter moor的列名称不明确

Sqlite 带有Flatter moor的列名称不明确,sqlite,flutter,dart,flutter-moor,Sqlite,Flutter,Dart,Flutter Moor,我的结构如下: import 'package:moor_flutter/moor_flutter.dart'; export 'package:moor_flutter/moor_flutter.dart' show Value; part 'moor_database.g.dart'; @DataClassName('Story') class Stories extends Table { IntColumn get id => integer().autoIncrement

我的结构如下:

import 'package:moor_flutter/moor_flutter.dart';
export 'package:moor_flutter/moor_flutter.dart' show Value;

part 'moor_database.g.dart';

@DataClassName('Story')
class Stories extends Table {
  IntColumn get id => integer().autoIncrement()();
  TextColumn get title => text().withLength(max: 20).nullable()();
  TextColumn get storyText => text().nullable()();
  TextColumn get feeling => text().withLength(max: 1).nullable()();
  DateTimeColumn get date => dateTime()();
  DateTimeColumn get createdAt => dateTime()();
}

class Images extends Table {
  IntColumn get id => integer().autoIncrement()();
  IntColumn get storyId =>
      integer().nullable().customConstraint('NULL REFERENCES stories(id)')();
  TextColumn get path => text()();
}

class CompleteStory {
  final Story story;
  final List<Image> images;

  CompleteStory({
    this.story,
    this.images,
  });
}

@UseMoor(tables: [Stories, Images], daos: [StoryDao, ImageDao])
class AppDatabase extends _$AppDatabase {
  AppDatabase()
      : super(FlutterQueryExecutor.inDatabaseFolder(
          path: 'db.sqlite',
          logStatements: true,
        ));

  @override
  int get schemaVersion => 2;

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

@UseDao(tables: [Stories, Images])
class StoryDao extends DatabaseAccessor<AppDatabase> with _$StoryDaoMixin {
  final AppDatabase db;

  StoryDao(this.db) : super(db);

  Future<List<Story>> getAllStories() => select(stories).get();

  Stream<List<CompleteStory>> watchAllStories() {
    return (select(stories)
          ..orderBy([
            (s) => OrderingTerm(expression: s.date, mode: OrderingMode.asc),
          ]))
        .join([
          leftOuterJoin(stories, stories.id.equalsExp(images.storyId)),
        ])
        .watch()
        .map((rows) {
          final groupedData = <Story, List<Image>>{};

          for (final row in rows) {
            final story = row.readTable(stories);
            final image = row.readTable(images);

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

          print(groupedData.entries);

          return [
            for (final entry in groupedData.entries)
              CompleteStory(story: entry.key, images: entry.value)
          ];
        });
  }

  Future insertStory(Insertable<Story> story) => into(stories).insert(story);
  Future updateStory(Insertable<Story> story) => update(stories).replace(story);
  Future deleteStory(Insertable<Story> story) => delete(stories).delete(story);
}

@UseDao(tables: [Images])
class ImageDao extends DatabaseAccessor<AppDatabase> with _$ImageDaoMixin {
  final AppDatabase db;

  ImageDao(this.db) : super(db);

  Stream<List<Image>> watchImages() => select(images).watch();
  Future insertImage(Insertable<Image> image) => into(images).insert(image);
}

import'package:moor_flatter/moor_flatter.dart';
“出口”包装:moor_颤振/moor_颤振。dart“显示价值;
“摩尔大学数据库g.dart”部分;
@DataClassName('故事')
类故事扩展表{
IntColumn get id=>integer().autoIncrement();
TextColumn get title=>text().withLength(最大值:20).nullable();
TextColumn get storyText=>text().nullable();
TextColumn get feeling=>text().withLength(最大值:1).nullable();
DateTimeColumn获取日期=>dateTime();
DateTimeColumn get createdAt=>dateTime();
}
类图像扩展表{
IntColumn get id=>integer().autoIncrement();
IntColumn获取故事ID=>
integer().nullable().customConstraint('NULL引用故事(id)')();
TextColumn get path=>text();
}
类完全理论{
最后的故事;
最后列出图像;
完整的({
这个故事,,
这是一张照片,
});
}
@UseMoor(表:[故事,图像],daos:[故事,图像])
类AppDatabase扩展了$AppDatabase{
AppDatabase()
:super(flatterQueryExecutor.inDatabaseFolder)(
路径:“db.sqlite”,
对,,
));
@凌驾
int get schemaVersion=>2;
@凌驾
迁移策略获取迁移{
返回迁移策略(
beforeOpen:(详细信息)异步{
等待customStatement('PRAGMA foreign_keys=ON');
},
);
}
}
@UseDao(表:[故事,图像])
类StoryDao使用$StoryDaoMixin扩展DatabaseAccessor{
最终数据库数据库;
StoryDao(this.db):super(db);
Future getAllStories()=>选择(故事).get();
streamwatchallstories(){
返回(选择(故事)
…订购人([
(s) =>OrderingTerm(表达式:s.date,mode:OrderingMode.asc),
]))
.加入([
leftOuterJoin(stories,stories.id.equalsExp(images.storyId)),
])
.手表
.map((行){
最终分组数据={};
用于(行中的最后一行){
最终故事=row.readTable(故事);
最终图像=行可读性(图像);
最终列表=groupedData.putIfAbsent(story,()=>[]);
if(image!=null)list.add(image);
}
打印(groupedData.entries);
返回[
对于(groupedData.entries中的最终条目)
CompleteStory(故事:entry.key,图像:entry.value)
];
});
}
未来插入故事(可插入故事)=>插入(故事)。插入(故事);
未来更新(可插入的故事)=>更新(故事)。替换(故事);
未来删除故事(可插入的故事)=>删除(故事)。删除(故事);
}
@UseDao(表:[图像])
类ImageDao使用$ImageDaoMixin扩展DatabaseAccessor{
最终数据库数据库;
ImageDao(this.db):super(db);
Stream watchImages()=>选择(图像).watch();
未来插入图像(可插入图像)=>插入(图像)。插入(图像);
}
但是,当我尝试在我的
streamBulder
上使用时,它从未到达
snap.hasData
,我猜这是因为我在终端上收到以下警告:

E/SQLiteLog(7229):(1)不明确的列名:stories.id


我尝试删除该应用程序,但没有成功。

我需要使用右侧的选择
故事来反转连接条件:

select(故事)
.加入([
leftOuterJoin(storyImages,storyImages.id.equalsExp(stories.id)),
])
.手表

是否打印(groupedData.entries)打印任何东西?它没有打印值,但现在是,检查我的答案。很高兴你解决了它。