Swift GRDB 自增主键:使用 `encode(to:)` 方法写入数据库
在 Swift GRDB 中,我们可以使用 DatabaseValue 类型的 .null 值来表示自增的主键。我们可以在模型类中使用 Column 属性来定义主键和自增:
import GRDB
struct Person: Codable, FetchableRecord, MutablePersistableRecord {
var id: Int64?
var name: String
var email: String
static let databaseTableName = "persons"
static let idColumn = Column("id")
// Define primary key and auto-increment
static var databasePrimaryKey: PrimaryKey {
return idColumn
}
static var databaseColumnConstraintBindings: [CodingKeys: ColumnConstraintBinding]? {
return [idColumn: ColumnConstraintBinding(isPrimary: true, isAutoIncrement: true)]
}
// MARK: - Persistence
mutating func didInsert(with rowID: Int64, for column: String?) {
id = rowID
}
}
在上面的例子中,我们定义了一个 Person 模型类,它有一个可选的 id 属性作为主键,并且定义了 idColumn 和 databasePrimaryKey 属性来指定主键。我们还定义了一个 databaseColumnConstraintBindings 属性来指定 idColumn 的约束条件,其中 isAutoIncrement 设置为 true 表示这是一个自增的主键。
当我们需要将 Person 对象写入数据库时,我们可以使用 encode(to:) 方法并在 EncodableRecord 协议中实现它:
let person = Person(name: "John", email: "john@example.com")
try dbQueue.write { db in
try person.encode(to: db)
}
在上面的例子中,我们首先创建了一个 Person 对象,然后在 dbQueue.write 事务中使用 encode(to:) 方法将其写入数据库。由于 id 属性是可选的,并且我们在模型类中指定了它是一个自增的主键,因此数据库将为我们自动生成一个唯一的主键值,并将其赋值给 id 属性。在写入事务完成后,我们可以在 didInsert(with:for:) 方法中访问新的主键值。
原文地址: https://www.cveoy.top/t/topic/oR84 著作权归作者所有。请勿转载和采集!