在 Swift GRDB 中,如果您想要在使用 'encode(to:)' 方法时绑定主键并使其自增,可以按照以下步骤操作:

  1. 在您的模型结构体中,将主键声明为一个可选的 'Int' 类型,并将其命名为 'id'(或其他您喜欢的名称):
struct MyModel: Codable, FetchableRecord, TableRecord {
    var id: Int?
    var name: String
    var age: Int
    ...
}
  1. 在 'MyModel' 中,添加一个静态属性 'databaseTableName',以指示表的名称:
static let databaseTableName = 'my_table'
  1. 在 '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, ...])
}
  1. 在 'MyModel' 中,添加一个 'init(row:)' 方法,以从查询结果中初始化模型实例:
init(row: Row) {
    id = row['id']
    name = row['name']
    age = row['age']
    ...
}
  1. 在 'MyModel' 中,添加一个方法 'didInsert(with:for:)',以在插入新记录时设置自增主键值:
mutating func didInsert(with rowID: Int64, for column: String?) {
    id = Int(rowID)
}
  1. 然后,您可以使用 '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。

Swift GRDB: 使用 encode(to:) 绑定主键并实现自增

原文地址: https://www.cveoy.top/t/topic/oR9N 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录