У меня есть столбцы, как указано ниже:
public function up()
{
Schema::create('stnk', function(Blueprint $table)
{
$table->increments('id');
$table->string('no_reg', 50)->unique();
$table->string('no_bpkb', 50)->unique();
$table->string('nama_pemilik', 100);
$table->string('alamat');
$table->string('merk', 50);
$table->string('tipe', 50);
$table->string('jenis', 50);
$table->smallInteger('tahun_pembuatan');
$table->smallInteger('tahun_registrasi');
$table->smallInteger('isi_silinder');
$table->string('no_rangka', 50);
$table->string('no_mesin', 50);
$table->string('warna', 50);
$table->string('bahan_bakar', 50);
$table->string('warna_tnkb', 50);
$table->string('kode_lokasi', 50);
$table->date('berlaku_sampai');
$table->timestamps();
$table->index('created_at');
$table->index('updated_at');
});
}
Я сделал сеялку для stnk table
Теперь хочу переименовать id
в id_stnk
.
Я добавил "doctrine / dbal" в "composer" и сделал composer update
.
Я сделал миграцию php artisan migration:make rename_column
.
Затем я добавил новый метод в rename_column:
Schema::table('stnk', function(Blueprint $table)
{
$table->renameColumn('id', 'id_stnk');
});
Затем я попытался запустить команду, php artisan migrate
но получил ошибку, как указано ниже:
[Ulluminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1025 Error on rename of './my_database/#sql -447_33' to './my_database/stnk' (error: 150) (SQL: ALTER TABLE stnk CHANGE id id_stnk INT UNSIGENED AUTO_INCREMENT NOT NULL)
[PDOException]
SQLSTATE[HY000]: General error: 1025 Error on rename of './my_database/#sql -447_33' to './my_database/stnk' (error: 150)
id
наstnk
таблицу.make:migration
а не сейчасmigrate:make
"doctrine/dbal": "~2.3"
Без этого вы получите несколько очень неясных ошибок. Это было поднято как ошибка здесь github.com/laravel/framework/issues/3116 и с возможно менее полезным упоминанием в документации здесь laravel.com/docs/5.0/schema#renaming-columnsПервое, что вам нужно сделать, это создать файл миграции.
Введите свою командную строку
php artisan make:migration rename_stk_column --table="YOUR TABLE" --create
После создания файла. Откройте новый созданный файл миграции в папке вашего приложения в папке database / migrations.
В свой метод вставьте это:
Schema::table('stnk', function(Blueprint $table) { $table->renameColumn('id', 'id_stnk'); }); }
и в вашем методе вниз:
Schema::table('stnk', function(Blueprint $table) { $table->renameColumn('id_stnk', 'id); }); }
тогда в командной строке просто введите
Тогда волла! вы только что переименовали id в id_stnk. Кстати, вы можете использовать
php artisan migrate:rollback
чтобы отменить изменения. Удачи
источник
Выполните следующие действия, соответственно, для переименования файла миграции столбца.
1- Есть ли в вашем проекте библиотека Doctrine / dbal. Если вы сначала не запустили команду
composer require doctrine/dbal
2- создать файл миграции обновления для обновления старого файла миграции. Предупреждение (имя должно быть таким же)
php artisan make:migration update_oldFileName_table
например, мое старое имя файла миграции: create_users_table имя файла обновления должно: update_users_table
3- update_oldNameFile_table.php
Schema::table('users', function (Blueprint $table) { $table->renameColumn('from', 'to'); });
"от" моего старого имени столбца и "к" моему новому имени столбца
4- Наконец запустите команду migrate
Ссылка на источник: документ laravel
источник
Переименование столбцов (Laravel 5.x)
Чтобы переименовать столбец, вы можете использовать метод renameColumn в построителе схемы. * Перед переименованием столбца обязательно добавьте зависимость doctrine / dbal в ваш файл composer.json. *
Или вы можете просто запросить пакет с помощью composer ...
composer require doctrine/dbal
Источник: https://laravel.com/docs/5.0/schema#renaming-columns
Примечание. Используйте make: migration, а не migrate: make для Laravel 5.x.
источник
Бросил сюда свои 0,02 доллара, поскольку ни один из ответов не помог, но отправил меня по правильному пути. Случилось так, что предыдущее внешнее ограничение вызывало ошибку. Очевидно, если подумать.
Итак, в новом
up
методе миграции сначала отбросьте это исходное ограничение, переименуйте столбец, а затем снова добавьте ограничение с новым именем столбца. В этомdown
методе вы делаете прямо противоположное, чтобы вернуть настройку проданного./** * Run the migrations. * * @return void */ public function up() { Schema::table('proxy4s', function (Blueprint $table) { // Drop it $table->dropForeign(['server_id']); // Rename $table->renameColumn('server_id', 'linux_server_id'); // Add it $table->foreign('linux_server_id')->references('id')->on('linux_servers'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('proxy4s', function (Blueprint $table) { // Drop it $table->dropForeign(['linux_server_id']); // Rename $table->renameColumn('linux_server_id', 'server_id'); // Add it $table->foreign('server_id')->references('id')->on('linux_servers'); }); }
Надеюсь, это кому-то сэкономит время в будущем!
источник
Приведенный выше ответ хорош, или, если это не повредит вам, просто откатите миграцию, измените имя и снова запустите миграцию.
php artisan migrate:rollback
источник