Откат типа UUID при миграции Laravel - PullRequest
0 голосов
/ 29 февраля 2020

Я переключаюсь на первичные ключи UUID, используя пакет Ramsey \ Uuid, и он отлично работает. Единственная проблема, с которой до сих пор сталкивались, это когда я запускаю php artisan migrate: откат, чтобы изменить его обратно на исходный идентификатор первичного ключа:

Освещение \ Database \ QueryException: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 У вас ошибка в синтаксисе SQL; обратитесь к руководству, соответствующему вашей версии сервера MariaDB, чтобы узнать правильный синтаксис для использования рядом с 'CHARACTER SET utf8mb4 NOT NULL COLLATE utf8mb4_unicode_ci' в строке 1 (SQL: ALTER TABLE model_has_roles CHANGE model_id model_id BIGINT UNSIGNED AUTO_INCREMENT CHARACTER SET utfmbmb4 NOT NULL COLLATE utf8mb4_unicode_ci)

Мой код:

public function up()
{
    if(!Type::hasType('uuid')) {
        Type::addType('uuid', 'Ramsey\Uuid\Doctrine\UuidType');
    }

    Schema::table('model_has_roles', function (Blueprint $table) {
        $table->uuid('model_id')->change();
    });
}

public function down()
{
    Schema::table('model_has_roles', function (Blueprint $table) {
        $table->bigIncrements('model_id')->change();
    });

}

Что я делаю не так?

1 Ответ

0 голосов
/ 29 февраля 2020

Похоже, вы столкнулись с этой проблемой: https://github.com/doctrine/dbal/issues/3714

Консенсус заключается в том, что добавление ->charset(null) к определению столбца - лучший способ обойти проблему в временный.

Попробуйте

public function down()
{
    Schema::table('model_has_roles', function (Blueprint $table) {
        $table->bigIncrements('model_id')->charset(null)->change();
    });
}
...