Vapor Fluent 如何向现有表添加新的必填字段键

Posted

技术标签:

【中文标题】Vapor Fluent 如何向现有表添加新的必填字段键【英文标题】:Vapor Fluent How to add a new required field key to existing table 【发布时间】:2022-01-01 12:39:27 【问题描述】:

我有一个使用 Vapor Fluent PostgreSQL 构建的已部署后端。

现在我需要将新的必填字段键 new_field 添加到数据库中架构名称为 schema_name 的表中。 我创建了一个新的迁移:

struct AddNewFieldToSchema: Migration 
    func prepare(on database: Database) -> EventLoopFuture<Void> 
        database.schema("schema_name")
            .field("new_field", .string, .required)
            .update()
    
    
    func revert(on database: Database) -> EventLoopFuture<Void> 
        database.schema("schema_name")
            .deleteField("new_field")
            .update()
    

但是运行后却报错:

Fatal error: Error raised at top level: server: column "new_field" of relation "schema_name" contains null values (ATRewriteTable)

我猜这是因为使用旧数据模型创建的现有数据没有new_field 的值,因为如果数据库为空,此新迁移运行良好。

我该如何解决这个问题?谢谢。

【问题讨论】:

【参考方案1】:

.field 函数接受一个可选属性列表,您可以在其中传递默认值,因此对您来说是

func prepare(on database: Database) -> EventLoopFuture<Void> 
  database.schema("schema_name")
    .field("new_field", .string, .required, .sql(.default("Your default value")))
    .update()

【讨论】:

以上是关于Vapor Fluent 如何向现有表添加新的必填字段键的主要内容,如果未能解决你的问题,请参考以下文章

Vapor fluent 不会在违反外键约束时抛出

如何在 Vapor/Fluent 中正确查询 Postgres JSONB 字段

如何为蒸汽添加新的依赖项?

如何在 django modelform 中的必填字段后添加 *?

如何向WooCommerce添加默认结算标题?

Vapor 2,Fluent 模型子类