将列添加到蒸气中的现有表

时间:2018-10-19 20:05:53

标签: swift sqlite vapor server-side-swift

我有一个正在处理的项目,其中有PostsComments。我使用外键(postId)将评论链接到帖子。但是,直到我第一次使用Comment类构建项目后,该外键才添加到我的Comment类中。

postId字段添加到注释类后,我尝试运行该项目并创建注释。该项目可以构建并正常运行,但是当我尝试创建注释时,出现错误:table Comment has no column named postId

这是Vapor内的某种迁移问题吗?

1 个答案:

答案 0 :(得分:2)

您仍然需要将蒸气变化与数据库同步。如您所料,您可以通过配置迁移来做到这一点。将此添加到您的configure.swift文件。如果您已经制作了Migration结构,则可能要选择其他名称,因为相同的名称可能会导致问题。

struct AddPostID: Migration {
    // Need to declare which database, assuming PostgreSQL here
    typealias Database = PostgreSQLDatabase

    static func prepare(on conn: PostgreSQLConnection) -> Future<Void> {
        return Database.update(Comment.self, on: conn) { builder in
            builder.field(for: \.postId)
        }
    }

    static func revert(on connection: PostgreSQLConnection) -> Future<Void> {
        return Database.delete(Comment.self, on: connection)
    }
}

然后在同一文件中将以下内容添加到您的configure()函数中(您可能已经有了MigrationConfig()行并注册了行,因此,在这种情况下,只需添加新行即可)

var migrations = MigrationConfig()
migrations.add(migration: AddPostID.self, database: .psql)
services.register(migrations)