Изменить поле VARCHAR через миграцию в Vapor Fluent-MySQL
Я использую Vapor 3
а также FluentMySQL
для моего нового проекта и хочу изменить максимальную длину поля (varchar(N)
через миграцию. Как я могу это сделать?
У меня есть модель по имени Word
в моем проекте и одно из его полей sourceIdentifier
то есть String
и имеют максимальную длину 12. Модель примерно такая:
final class Word: MySQLModel {
...other properties
var sourceIdentifier: String
...other properties
}
Сначала я подумал, что 5 достаточно для поля, и использовал этот код для создания Table
для этой модели:
static func prepare(on conn: MySQLConnection) -> Future<Void> {
return MySQLDatabase.create(Word.self, on: conn) { builder in
...other fields...
builder.field(for: \.sourceIdentifier, type: .varchar(5, characterSet: nil, collate: nil))
...other fields...
}
}
Как вы видите выше, таблица создана с полем sourceIdentifier
и его тип .varchar(5, characterSet: nil, collate: nil)
,
Теперь я хочу увеличить максимальную длину поля с помощью миграции.
Я тоже пробовал MySQLDatabase.update
как это:
static func prepare(on conn: MySQLConnection) -> Future<Void> {
return MySQLDatabase.update(Word.self, on: conn) { builder in
builder.field(for: \.sourceIdentifier, type: .varchar(12, characterSet: nil, collate: nil))
}
}
и это не сработало; Ничего не случилось.
Как я могу изменить структуру таблицы через Vapor
, FluentMySQL
а миграции?
1 ответ
Вы можете сделать что-нибудь с сырым запросом, как это
static func prepare(on conn: MySQLConnection) -> Future<Void> {
return conn.raw("ALTER TABLE emp MODIFY COLUMN name VARCHAR(100);").run()
}
Вы можете попробовать это.
static func prepare(on conn: MySQLConnection) -> Future<Void> {
return Database.create(self, on: connection) { builder in
builder.field(for: \.id, type: .bigint(20), .primaryKey)
builder.field(for: \.fieldA, type: .varchar(12))
builder.field(for: \.fieldB, type: .bigint(20))
}
}
Вместо того, чтобы использовать addProperties(to:)
чтобы добавить все поля в базу данных, вы можете использовать field(for:type:_:)
добавлять поля вручную.