我有2个数据库。一个用于文件夹,另一个用于笔记。 文件夹数据库包含ID列表的标题和json字符串 ID应该代表第二个注释数据库。 基本上,文件夹需要包含一个注释列表,这是到目前为止我发现的最好方法。我的问题是,当我创建新便笺并将其插入数据库时,我不确定如何获取新便笺的ID。
如果我在创建便笺时设置了ID,则所有便笺将具有相同的ID。 如果我未设置ID,则调用note.id返回null。 根据我的创建函数,便笺的ID应自行设置(ID INTEGER PRIMARY KEY AUTOINCREMENT)
我的想法是,在创建新的Note时,我会以某种方式返回int id,以便将其轻松插入到文件夹中。这就是我到目前为止所拥有的。
void addNewNote(Note note) async {
var db_connection = await db;
String query =
'INSERT INTO Note(title, content, date_created, date_last_edited) VALUES(\'${note.title}\', \'${note.content}\', \'${note.date_created}\', \'${note.date_last_edited}\')';
await db_connection.transaction((transaction) async {
return await transaction.rawInsert(query);
});
}
答案 0 :(得分:1)
您应该可以像这样从rawInsert获取ID:
$model->addRule(
'category',
function ($attribute, $params, $validator) use ($model) {
if (empty($model->$attribute)) {
$model->addError($attribute, 'Error message');
}
}
);
根据文档:https://pub.dev/packages/sqflite#raw-sql-queries
除了将id的字符串列表存储在folders表上之外,您还可以尝试在notes表上将folder_id作为外键存储: https://sqlite.org/foreignkeys.html
答案 1 :(得分:0)
插入的ID也从db.insert()
帮助方法中返回,作为签名
Future<int> insert(String table, Map<String, dynamic> values,
{String nullColumnHack, ConflictAlgorithm conflictAlgorithm})
描述。示例:
final Database db = await getDb();
int insertedId = await db.insert(
todosTableName,
todo.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace,
);
print('inserted1: $insertedId');