【问题标题】:Add a default value in migration in Vapor在 Vapor 的迁移中添加默认值
【发布时间】:2019-12-31 17:16:19
【问题描述】:

如何在 Fluent 迁移中为非可选字段添加默认值? 我目前有这个错误:

⚠️ PostgreSQL Error: column "firstName" contains null values

我唯一的选择是

public func field<T>(for key: KeyPath<Self.Model, T>, isIdentifier: Bool? = nil)
public func field<T>(for key: KeyPath<Self.Model, T>, type: Self.Model.Database.SchemaFieldType)

编辑:感谢蒂姆的回答,解决方案是:

static func prepare(on conn: PostgreSQLConnection) -> Future<Void> {
        return Database.update(User.self, on: conn) { builder in
            builder.field(for: \User.firstName, type: .text, .default(.literal("")))
        }
    }

【问题讨论】:

  • 我认为目前只能通过原始查询获得。

标签: swift vapor vapor-fluent


【解决方案1】:

还有一个你没见过的选项:

static func prepare(on connection: PostgreSQLConnection) -> Future<Void> {
  return Database.update(Event.self, on: connection) { builder in
    builder.field(for: \Event.isPrivate, type: .boolean, .default(.literal(.boolean(.false))))
  }
}

【讨论】:

  • 我在使用它添加默认值时收到错误PostgreSQL Error: column "created_at" of relation "experiments" already exists
【解决方案2】:

以防万一有人来到这里并试图在 Vapor 4 中这样做:

func prepare(on database: Database) -> EventLoopFuture<Void> {
    let defaultValue = SQLColumnConstraintAlgorithm.default(false)
    return database.schema(“event”)
        .field(“is_private”, .bool, .sql(defaultValue))
        .update()
}

【讨论】:

  • 或者干脆.sql(.default(false))
猜你喜欢
  • 2011-10-29
  • 1970-01-01
  • 2015-08-12
  • 2019-01-28
  • 2016-10-06
  • 2016-11-16
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多