通过在Vapor Fluent-MySQL中进行迁移来更改VARCHAR字段

时间:2019-03-27 17:53:59

标签: swift vapor vapor-fluent fluent-mysql

我正在为新项目使用Vapor 3FluentMySQL,并希望通过迁移来更改字段的最大长度(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))
    }
}

它没有用;什么都没发生。

如何通过VaporFluentMySQL和迁移来更改表的结构?

2 个答案:

答案 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:)将所有字​​段添加到数据库中。