Swift/Vapor 中的 Postgres jsonb 数据
Postgres jsonb data in Swift/Vapor
我有以下创建 jsonb 列的 Vapor Fluent 迁移
public func prepare(on database: Database) -> EventLoopFuture<Void> {
return database.schema(MyModel.schema)
.id()
.field(.name, .custom("VARCHAR(255)"), .required)
.field(.metadata, .custom("JSONB"), .required)
.create()
}
模型看起来像这样:
public final class MyModel: Model, Content {
public static let schema = "blah"
@ID(key: .id)
public var id: UUID?
@Field(key: .metadata)
public var metadata: Data // This is obviously wrong.
}
知道如何让 Vapor 从 Postgres jsonb 列检索和设置数据吗?
我认为您正在寻找的是在迁移中声明字段时使用 .json
类型。
这是我使用入门模板代码整理的示例以供参考:
struct Person: Codable {
let name: String
}
final class Todo: Model, Content {
static let schema = "todos"
@ID(key: .id)
var id: UUID?
@Field(key: "metadata")
var metadata: [String: String]
@Field(key: "person")
var person: Person
init() { }
init(id: UUID? = nil, metadata: [String: String], person: Person) {
self.id = id
self.metadata = metadata
self.person = person
}
}
我声明了两个字段,metadata
和 person
。
struct CreateTodo: Migration {
func prepare(on database: Database) -> EventLoopFuture<Void> {
return database.schema("todos")
.id()
.field("metadata", .json, .required)
.field("person", .json, .required)
.create()
}
func revert(on database: Database) -> EventLoopFuture<Void> {
return database.schema("todos").delete()
}
}
我有以下创建 jsonb 列的 Vapor Fluent 迁移
public func prepare(on database: Database) -> EventLoopFuture<Void> {
return database.schema(MyModel.schema)
.id()
.field(.name, .custom("VARCHAR(255)"), .required)
.field(.metadata, .custom("JSONB"), .required)
.create()
}
模型看起来像这样:
public final class MyModel: Model, Content {
public static let schema = "blah"
@ID(key: .id)
public var id: UUID?
@Field(key: .metadata)
public var metadata: Data // This is obviously wrong.
}
知道如何让 Vapor 从 Postgres jsonb 列检索和设置数据吗?
我认为您正在寻找的是在迁移中声明字段时使用 .json
类型。
这是我使用入门模板代码整理的示例以供参考:
struct Person: Codable {
let name: String
}
final class Todo: Model, Content {
static let schema = "todos"
@ID(key: .id)
var id: UUID?
@Field(key: "metadata")
var metadata: [String: String]
@Field(key: "person")
var person: Person
init() { }
init(id: UUID? = nil, metadata: [String: String], person: Person) {
self.id = id
self.metadata = metadata
self.person = person
}
}
我声明了两个字段,metadata
和 person
。
struct CreateTodo: Migration {
func prepare(on database: Database) -> EventLoopFuture<Void> {
return database.schema("todos")
.id()
.field("metadata", .json, .required)
.field("person", .json, .required)
.create()
}
func revert(on database: Database) -> EventLoopFuture<Void> {
return database.schema("todos").delete()
}
}