flutter - flutter moor 在迁移后添加初始数据
问题描述
迁移实体并添加列后,我想在表中为新添加的列插入已存在记录的值。我怎样才能做到这一点?
例如,在这种情况下,对于数据库中已经存在的记录,我希望 DueDate 列的值为 DateTime(2019,1,1)。
class Todos extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get title => text().withLength(min: 6, max: 10)();
TextColumn get content => text().named('body')();
IntColumn get category => integer().nullable()();
DateTimeColumn get dueDate => dateTime().nullable()(); // new, added column
}
int get schemaVersion => 2; // bump because the tables have changed
@override
MigrationStrategy get migration => MigrationStrategy(
onCreate: (Migrator m) {
return m.createAllTables();
},
onUpgrade: (Migrator m, int from, int to) async {
if (from == 1) {
// we added the dueDate property in the change from version 1
await m.addColumn(todos, todos.dueDate);
}
}
);
解决方案
等待您可以使用的 m.addColumn 和 .then() customStatement()
。
onUpgrade: (Migrator m, int from, int to) async {
if (from == 1) {
await m.addColumn(todos, todos.dueDate).then((value) async {
var dateInTheFuture = (new DateTime.utc(2022, 12, 24).millisecondsSinceEpoch / 1000).round();
await customStatement(''' UPDATE todos SET dueDate = '$dateInTheFuture' ''');
});
}
}
推荐阅读
- python - 错误 - 接受 1 个位置参数,但给出了 2 个
- node.js - React Native:Xcode 12.5 EMFILE:打开的文件太多,看
- pytorch - 扩展 Pytorch:Python vs. C++ vs. CUDA
- python - 如何根据我的训练 csv 文件中的文件名将文件夹中的图像分隔到训练文件夹
- spartacus-storefront - 如何在 Spartacus 店面中创建和使用自定义 API?
- c - SSL_read 函数的错误代码卡住了我
- python - Python,熊猫 DF。从字符串中获取数字并将其添加到新列
- c# - 处置 HttpResponseMessage 是好习惯吗?
- javascript - 检测输入元素的属性(类型)变化
- python - 在不使用任何导入的情况下将字符串拆分为单词和标点符号