Как изменить миграцию в 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 способа сделать это:
- Run
php artisan migrate:refresh
. Это будет откат всех ваших миграция и миграция всех ваших миграций. Если вы запустите эту команду, все данные вставляются в базу данных будут потеряны. -
Run
php artisan make:migration enter_your_migration_name_here
. Затем вставьте это в миграцию:$table->string('error_message')->nullable()->change();
затем запустите
php artisan migrate
внести изменения в таблице. (Обратите внимание, что при этом у вас есть requirecomposer require doctrine/dbal
в свой композитора)
можно использовать change
метод, он позволяет изменять некоторые существующие типы столбцов на новый тип или изменять атрибуты столбца.
например, измените столбец на nullable:
Schema::table('log_for_user', function ($table) {
$table->string('error_message')->nullable()->change();
});
но прежде всего вам понадобится doctrine/dbal
пакета
composer require doctrine/dba