枚举给出了 Vapor 4 和 Fluent 的错误

Gle*_*enn 5 enums vapor vapor-fluent

这让我很困惑:

\n

我有一个模型,我想在其中使用枚举。我首先声明枚举:

\n
enum MenuChoices: String, Codable {\n    case reachableAt\n    case attentionTo\n    case reasonVisit\n    case reasonProblem\n}\n
Run Code Online (Sandbox Code Playgroud)\n

然后是我的班级领域:

\n
@Enum(key: "menu_choices")\nvar menuChoices: MenuChoices\n
Run Code Online (Sandbox Code Playgroud)\n

然后我使用迁移在数据库中创建它:

\n
struct CreateUserMenu: Migration {    \nfunc prepare(on database: Database) -> EventLoopFuture<Void> {\n    return database.enum("menu_choices")\n        .case("reachable_at")\n        .case("attention_to")\n        .case("reason_visit")\n        .case("reason_problem")\n        .create()\n        .flatMap { menu_choices in\n            return database.schema("user_menus")\n                .id()\n                .field("created_at", .datetime, .required)\n                .field("updated_at",.datetime, .required)\n                .field("deleted_at",.datetime)\n                .field("menu_choices", menu_choices)\n                .field("be_nl", .string)\n                .field("be_fr", .string)\n                .field("en_us", .string)\n                .create()\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

到目前为止,一切都很好。此迁移有效并且数据库看起来正常。但是当我想添加一些数据以在另一个迁移中为数据库提供种子时,我收到错误:

\n
let test = UserMenu( menuChoices: MenuChoices.reachableAt, beNl: "nl", beFr: "fra", enUs: "eng")\nlet _ = test.save(on: database)\n
Run Code Online (Sandbox Code Playgroud)\n
\n
+ App.addUserMenus on default\nWould you like to continue?\ny/n> y\n[ ERROR ] previousError(MySQL error: Server error: Data truncated for column \'menu_choices\' at row 1)\nFatal error: Error raised at top level: previousError(MySQL error: Server error: Data truncated for column \'menu_choices\' at row 1): file /AppleInternal/BuildRoot/Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-1103.8.25.8/swift/stdlib/public/core/ErrorType.swift, line 200\n    USSS-Voyager-II:24yours data$ \n
Run Code Online (Sandbox Code Playgroud)\n

不幸的是,这个错误并不能真正帮助查明问题的根源

\n

Nic*_*ick 5

问题在于,枚举的 swift 定义和 Fluent 枚举之间没有映射。为 swift 枚举定义添加一个与 Fluent 的字符串文字值相匹配的字符串文字值将解决该问题。

enum MenuChoices: String, Codable {
    case reachableAt = "reachable_at"
    case attentionTo = "attention_to"
    case reasonVisit = "reason_visit"
    case reasonProblem = "reason_problem"
}
Run Code Online (Sandbox Code Playgroud)