Swift GRDB: 使用 encode(to:) 绑定主键并实现自增
在 Swift GRDB 中,如果您想要在使用 'encode(to:)' 方法时绑定主键并使其自增,可以按照以下步骤操作:
- 在您的模型结构体中,将主键声明为一个可选的 'Int' 类型,并将其命名为 'id'(或其他您喜欢的名称):
struct MyModel: Codable, FetchableRecord, TableRecord {
var id: Int?
var name: String
var age: Int
...
}
- 在 'MyModel' 中,添加一个静态属性 'databaseTableName',以指示表的名称:
static let databaseTableName = 'my_table'
- 在 'MyModel' 中,添加一个静态方法 'setupDatabase',以设置表的结构和插入初始数据(可选):
static func setupDatabase(_ db: Database) throws {
try db.create(table: databaseTableName) { t in
t.column('id', .integer).primaryKey()
t.column('name', .text).notNull()
t.column('age', .integer).notNull()
...
}
try db.execute(sql: 'INSERT INTO (databaseTableName) (name, age, ...) VALUES (?, ?, ...)', arguments: ['John Doe', 30, ...])
}
- 在 'MyModel' 中,添加一个 'init(row:)' 方法,以从查询结果中初始化模型实例:
init(row: Row) {
id = row['id']
name = row['name']
age = row['age']
...
}
- 在 'MyModel' 中,添加一个方法 'didInsert(with:for:)',以在插入新记录时设置自增主键值:
mutating func didInsert(with rowID: Int64, for column: String?) {
id = Int(rowID)
}
- 然后,您可以使用 'encode(to:)' 方法将模型实例编码为 JSON 或其他格式,并在插入新记录时自动绑定主键并使其自增:
let dbQueue = try DatabaseQueue(path: 'path/to/database.sqlite3')
try dbQueue.write { db in
var model = MyModel(name: 'Jane Doe', age: 25, ...)
try model.encode(to: db)
print(model.id) // 输出插入的记录的新主键值
}
在执行上述代码后,Swift GRDB 将自动绑定主键并将其设置为自增。每当您使用 'encode(to:)' 方法插入新记录时,主键将自动增加 1。
原文地址: https://www.cveoy.top/t/topic/oR9N 著作权归作者所有。请勿转载和采集!