Как изменить миграцию в 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');
    }
}

Я также выполнил это один раз. Теперь мне нужно добавить ->nullable() метод

4 ответов


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

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')->nullabe()->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 команде отката. Например, следующая команда откатит последние пять миграции:

php artisan migrate:rollback --step=5

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

надеюсь, что это помогает!


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

php artisan migrate:refresh --seed

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

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


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

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

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

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


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

например, измените столбец на nullable:

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

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

composer require doctrine/dba