Подтвердить что ты не робот

Как изменить миграцию в Laravel?

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

class CreateLogForUserTable extends Migration
{
    public function up()
    {
        Schema::create('log_for_user', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id');
            $table->string('table_name');
            $table->string('error_message');
            $table->unsignedTinyInteger('error_code');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::drop('log_for_user');
    }
}

Я также выполнил эту команду php artisan migrate один раз. Теперь мне нужно добавить метод ->nullable() в столбец error_message. Поэтому я редактировал свою миграцию, примерно так:

.
.
    $table->string('error_message')->nullable();
.
.

Но когда я снова выполняю php artisan migrate, он говорит:

Ничего мигрировать.

В любом случае, как я могу применить новую версию миграции?

4b9b3361

Ответ 1

Вы должны создать новую миграцию, используя команду:

php artisan make:migration update_error_message_in_log_for_user_table

Затем в этом созданном классе миграции добавьте эту строку, используя метод change следующим образом:

class UpdateLogForUserTable extends Migration
{
    public function up()
    {
        Schema::table('log_for_user', function (Blueprint $table) {
            $table->string('error_message')->nullable()->change();
        });
    }

    public function down()
    {
        Schema::table('log_for_user', function (Blueprint $table) {
            $table->string('error_message')->change();
        });
    }
}

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

php artisan migrate

и чтобы откатить изменения, используйте команду:

php artisan migrate:rollback

Вы можете откатить ограниченное количество миграций, указав опцию step в команде rollback. Например, следующая команда откатит последние пять миграций:

php artisan migrate:rollback --step=5

Подробнее об изменении столбцов с помощью миграции

Ответ 2

Если ваше приложение не находится в производстве и вы засеиваете свои данные, лучше всего выполнить:

php artisan migrate:refresh --seed

Эта команда удаляет все таблицы и воссоздает их. Затем он будет засеять данные.

Если вы создадите дополнительные миграции для каждого изменения во время разработки, вы получите сотни классов миграции.

Ответ 3

Вы можете использовать метод change, он позволяет изменять некоторые существующие типы столбцов на новый тип или изменять атрибуты столбца.

Например, измените столбец с нулевым значением:

Schema::table('log_for_user', function ($table) {
    $table->string('error_message')->nullable()->change();
});

Но прежде всего вам понадобится пакет doctrine/dbal

composer require doctrine/dba

Ответ 4

Есть два способа сделать это:

  • Запустите php artisan migrate:refresh. Это откат всех ваших миграции и миграции всех ваших миграций. Если вы запустите эту команду, все данные, вставленные в вашу базу данных, будут потеряны.
  • Запустите php artisan make:migration enter_your_migration_name_here. Затем вставьте это в свою миграцию:

    $table->string('error_message')->nullable()->change();

    Затем запустите php artisan migrate, чтобы изменить таблицу. (Обратите внимание, что когда вы это делаете, вам требуется composer require doctrine/dbal в вашем композиторе)