Изменить строку на десятичную Laravel Миграция - PullRequest
1 голос
/ 17 февраля 2020

Я пытаюсь изменить свою текущую таблицу и могу сделать это просто с помощью запроса SQL в моем файле миграции, например:

<?php
    public function up()
    {
        Schema::table('xyz', function (Blueprint $table) {
        DB::statement('ALTER TABLE mydatabase.xyz CHANGE funding_needed funding_needed decimal(10, 2) NOT NULL DEFAULT 0.00 ');
        DB::statement('ALTER TABLE mydatabase.xyz CHANGE funding_received funding_received decimal(10, 2) NOT NULL DEFAULT 0.00 ');
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('xyz', function (Blueprint $table) {
        DB::statement('ALTER TABLE mydatabase.xyz CHANGE funding_needed funding_needed varchar(191) NOT NULL ');
        DB::statement('ALTER TABLE mydatabase.xyz CHANGE funding_received funding_received varchar(191) NOT NULL DEFAULT 0');
        });
    }

Но если я сделаю это так, я получу ошибка:

<?php
    public function up()
    {
        Schema::table('xyz', function (Blueprint $table) {
             $table->decimal('funding_needed', 10, 2)->nullable(false)->default(0.00)->change();
             $table->decimal('funding_received', 10, 2)->nullable(false)->default(0.00)->change();
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('xyz', function (Blueprint $table) {          
         $table->string('funding_needed', 191)->nullable(false)->default(false)->change();
         $table->string('funding_received', 191)->nullable(false)->default(0)->change();
        });
    }

ОШИБКА:

Синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL произошла ошибка; обратитесь к руководству, соответствующему вашей MySQL версии сервера, чтобы узнать правильный синтаксис для использования рядом с 'CHARACTER SET utf8mb4 DEFAULT' 0 'NOT NULL COLLATE utf8mb4_unicode_ci, CHANGE' в строке 1 (SQL: ALTER TABLE xyz CHANGE funding_needed funding_needed funding_needed NUMERI C (10, 2) CHARACTER SET utf8mb4 DEFAULT '0' NOT NULL COLLATE utf8mb4_unicode_ci, CHANGE funding_received funding_received NUMERI C (10, 2) CHARACTER SET utf8mb4 DEFAULT '0' NOT NULL COLLATE * 1012) 1013 *

Я хочу сделать это 2-ым способом из-за запуска в производство. Я не хочу изменять производственную миграцию, чтобы она соответствовала моей производственной базе данных.

1 Ответ

1 голос
/ 17 февраля 2020

Как указано в этом потоке Github для пакета doctrine / dbal, который является пакетом, который вы устанавливаете перед запуском этого обновления, существует ошибка при изменении типов столбцов.

Использование ->charset(null) вместе с ->change() должны использоваться в качестве обходного пути, как указано в ссылке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...