postgresql - 如何存储带有小数字段的 Vapor Fluent 模型
问题描述
我有一个需要 type的Fluent
(支持的)模型,但我只能存储/ 。Postgres
Decimal
.float
.double
// Model
final class Stat: Model, Content, Equatable {
static let schema: String = "stats"
@ID(key: .id)
var id: UUID?
@Field(key: "name")
var name: String
@Field(key: "earned_run_average")
var era: Decimal // <-- CAN'T DO THIS
}
// Migration
struct CreateStatsTable: Migration {
func prepare(on database: Database) -> EventLoopFuture<Void> {
return database.schema(Stats.schema)
.id()
.field("name", .string, .required)
.field("earned_run_average", .decimal/*.decimal TYPE DOES NOT EXIST */, .required)
.create()
}
func revert(on database: Database) -> EventLoopFuture<Void> {
return database.schema(Stats.schema).delete()
}
}
上述带有迁移的模型将失败。如果这不容易实现(就像.string
or一样容易.double
),有没有办法获得类似于 type Decimal
in的行为Fluent
?
解决方案
最近添加了对 Postgres 的适当十进制支持。
因此,您应该能够在 Postgres DB 中的值之间使用Decimal
forModel
编码/解码,而Decimal
不会出现任何问题。
至于Migration
,仍然没有,.decimal
DataType
因此您可以简单地为 Postgres 数据库使用自定义字段,如下所示numeric
:
.field("earned_run_average", .sql(raw: "NUMERIC(7,2)"), .required)
这应该允许您Decimal
毫无问题地使用。
推荐阅读
- java - 将整数输入二维数组的最有效方法是什么?
- html - 如何限制表格单元格的宽度并隐藏溢出的内容
- sql-server - SSRS 矩阵标题被截断
- php - 谷歌地方 JSON 解析
- java - 声纳使用 try-with-resources 或在“finally”子句 java8 流中关闭此“流”
- javascript - Google Maps API 不显示我的标记
- javascript - Onsubmit 不调用函数
- r - 使用 Rblpapi 从 bsrch 获取数据的问题
- java - Tapestry 页面和 API
- batch-file - 如何使用批处理文件或 curl 从我的文本文件中删除 '\r\n'?