Как изменить миграцию в 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
, он говорит:
Ничего мигрировать.
В любом случае, как я могу применить новую версию миграции?
Ответы
Ответ 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
в вашем композиторе)