Добавить столбец к существующей таблице в Vapor
У меня есть проект, над которым я работаю, который имеет Posts
а также Comments
, Я связываю комментарий к сообщению, используя внешний ключ (postId). Однако этот внешний ключ не был добавлен в мой класс Comment до тех пор, пока я не собрал проект с классом Comment в первый раз.
После добавления postId
В поле класса комментариев я попытался запустить проект и создать комментарий. Проект собирается и работает нормально, но когда я пытаюсь создать комментарий, я получаю сообщение об ошибке: table Comment has no column named postId
Это какая-то проблема миграции внутри Vapor?
0 ответов
Вам все еще нужно синхронизировать вашу базу данных с вашими изменениями в паре. Как вы уже догадались, вы можете сделать это, настроив миграцию. Добавьте это в ваш файл configure.swift. Если вы уже создали структуру переноса, прежде чем захотите выбрать другое имя, так как это имя может вызвать проблемы.
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)