Добавить столбец к существующей таблице в 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)
Другие вопросы по тегам