Изменить поле VARCHAR через миграцию в Vapor Fluent-MySQL - PullRequest
1 голос
/ 27 марта 2019

Я использую 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 Ответ

1 голос
/ 27 марта 2019

Вы можете сделать что-нибудь с необработанным запросом, как этот

static func prepare(on conn: MySQLConnection) -> Future<Void> {
    return conn.raw("ALTER TABLE emp MODIFY COLUMN name VARCHAR(100);").run()
}
...