2

我正在为我的新项目使用Vapor 3andFluentMySQL并希望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和迁移更改表的结构?

4

2 回答 2

2

你可以用这样的原始查询做任何事情

static func prepare(on conn: MySQLConnection) -> Future<Void> {
    return conn.raw("ALTER TABLE emp MODIFY COLUMN name VARCHAR(100);").run()
}
于 2019-03-27T18:14:31.010 回答
0

你可以试试这个。

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:_:)

于 2020-02-12T08:11:53.990 回答