Gle*_*enn 5 enums vapor vapor-fluent
这让我很困惑:
\n我有一个模型,我想在其中使用枚举。我首先声明枚举:
\nenum 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然后我使用迁移在数据库中创建它:
\nstruct 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到目前为止,一切都很好。此迁移有效并且数据库看起来正常。但是当我想添加一些数据以在另一个迁移中为数据库提供种子时,我收到错误:
\nlet test = UserMenu( menuChoices: MenuChoices.reachableAt, beNl: "nl", beFr: "fra", enUs: "eng")\nlet _ = test.save(on: database)\n
Run Code Online (Sandbox Code Playgroud)\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问题在于,枚举的 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)