我正在为新项目使用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
和迁移来更改表的结构?
答案 0 :(得分:1)
您可以对原始查询执行任何操作
static func prepare(on conn: MySQLConnection) -> Future<Void> {
return conn.raw("ALTER TABLE emp MODIFY COLUMN name VARCHAR(100);").run()
}
答案 1 :(得分:0)
您可以尝试这个。
F1
您可以使用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:)
将所有字段添加到数据库中。