Добавить столбец к существующей таблице в Vapor - PullRequest
0 голосов
/ 19 октября 2018

У меня есть проект, над которым я работаю, который имеет Posts и Comments.Я связываю комментарий к сообщению, используя внешний ключ (postId).Однако этот внешний ключ не был добавлен в мой класс Comment до тех пор, пока я не собрал проект с классом Comment в первый раз.

После добавления поля postId в класс комментариев я попытался запуститьпроект и создать комментарий.Проект собирается и работает нормально, но когда я пытаюсь создать комментарий, я получаю сообщение об ошибке: table Comment has no column named postId

Является ли это проблемой миграции в Vapor?

1 Ответ

0 голосов
/ 07 февраля 2019

Вам все еще нужно синхронизировать базу данных с вашими изменениями в парах.Как вы уже догадались, вы можете сделать это, настроив миграцию.Добавьте это в ваш файл 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)
...