我有一个正在处理的项目,其中有Posts
和Comments
。我使用外键(postId)将评论链接到帖子。但是,直到我第一次使用Comment类构建项目后,该外键才添加到我的Comment类中。
将postId
字段添加到注释类后,我尝试运行该项目并创建注释。该项目可以构建并正常运行,但是当我尝试创建注释时,出现错误:table Comment has no column named postId
这是Vapor内的某种迁移问题吗?
答案 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)