Я пишу веб-сервис в Swift с использованием фреймворка Vapor.
У меня есть модель с именем Item
. По сути, он имеет только свойства name и id.
typealias VaporModel = Content & PostgreSQLModel & Parameter
final class Item: VaporModel {
var id: Int?
var name: String
}
После того, как я настроил контроллер для модели и добавил маршруты, когда я нажимаю на запрос Post Item, я получаю ошибку как Model.defaultDatabase is required to use as DatabaseConnectable
. Я думаю, что ошибка в том, что я не добавил Item
к Migrations
в configure.swift
, и я делаю то же самое после соответствия Item
PostgreSQLMigration
.
var migrations = MigrationConfig()
migrations.add(model: Item.self, database: .psql)
services.register(migrations)
Теперь я могу нажать на пост-запрос и создать элементы в базе данных.
Итак, я понимаю, что протокол Migration
создает схему по умолчанию для модели и добавляет новую таблицу в базу данных со свойствами модели в виде столбцов.
Теперь я хочу добавить свойство, такое как price
, в мой класс Item. Теперь, когда я нажимаю на почтовый запрос, я получаю сообщение об ошибке column "price" of relation "Item" does not exist
.
Я предполагаю, что протокол миграции сможет идентифицировать изменения схемы и столбец в моей таблице (это то, к чему я привык при использовании Realm для моих приложений iOS). Но я ошибаюсь и читаю документы по миграции и применяю методы миграции prepare
и revert
, как показано ниже.
extension Item: PostgreSQLMigration {
static func prepare(on conn: PostgreSQLConnection) -> Future<Void> {
return Database.create(self, on: conn) { creator in
creator.field(for: \.price)
}
}
static func revert(on connection: PostgreSQLConnection) -> EventLoopFuture<Void> {
return Future.map(on: connection) { }
}
}
Я все еще поражен той же ошибкой column "price" of relation "Item" does not exist
. Что мне здесь не хватает? Правильно ли указан код миграции?
Кроме того, я понимаю, что если я не внесу никаких изменений в модель, я могу закомментировать конфигурацию миграции, поскольку они не должны запускаться каждый раз, когда я запускаю службу. Это правильно?