1

我在后端使用 Vapor 3、Swift 5.1、PostgreSQL 12 和 Postico 1.5.10。在 PostgreSQL 数据库中,有一个名为eventDatetype的字段timestamp without time zone。请看截图:

在此处输入图像描述

在 Vapor 中,有一个模型:

import Vapor
import FluentPostgreSQL

final class TestModel: PostgreSQLModel {

    var id: Int?
    var eventDate: Date

    init(eventDate: Date) {
        self.eventDate = eventDate
    }

}

extension TestModel: Content {
}

extension TestModel: Migration {
}

extension TestModel: Parameter {
}

但是当我试图将Date(Swift)保存到timestamp without time zoneVapor 时,我会报错:

[ ERROR ] DecodingError.typeMismatch: Value of type 'String' required for key 'eventDate.date'. (NIOServer.swift:104)

如果在模型中我更改DateString,则 Vapor 会给我这个错误:

[ ERROR ] PostgreSQLError.server.error.transformAssignedExpr: column "eventDate" is of type timestamp without time zone but expression is of type text (NIOServer.swift:104)

所以问题是:如何转移DateStringtimestamp without time zone(或timestamp with time zone)?

我将不胜感激任何帮助或建议!

4

2 回答 2

0

这不是我想要的 100% 解决方案,但它也非常好。

import Vapor
import FluentPostgreSQL

final class TestModel: PostgreSQLModel {

    static var createdAtKey: TimestampKey? = \.createdAt

    var id: Int?
    var someValue: Int
    var someOtherProprty: String
    var createdAt: Date?

    init(someValue: Int, someOtherProprty: String) {
        self.someValue = someValue
        self.someOtherProprty = someOtherProprty
    }

}

extension TestModel: Content {
}

extension TestModel: Migration {
}

extension TestModel: Parameter {
}
于 2019-12-26T10:01:57.110 回答
0

为什么要保存没有时区的时间戳?没有时区的时间戳不是日期 - 它是一个字符串。

任何方式 - 你只需要初始化一个没有时区的时间格式,然后用它来获取一个字符串。

let formatter = DateFormatter()
// initially set the format based on your datepicker date / server String
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

let myString = formatter.string(from: Date()) 
于 2019-12-16T22:50:08.600 回答