Как переименовать столбец в laravel с помощью миграции?
У меня есть столбцы, как указано ниже:
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
Теперь я хочу переименовать id
в id_stnk
.
Я добавил "doctrine/dbal" в "композитор и сделаю 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)
Ответы
Ответ 1
Вам нужно создать еще один файл миграции и поместить его туда:
Запуск
Laravel 4: php artisan migrate:make rename_stnk_column
Laravel 5: php artisan make:migration rename_stnk_column
Затем в новом месте файла миграции:
class RenameStnkColumn extends Migration
{
public function up()
{
Schema::table('stnk', function(Blueprint $table) {
$table->renameColumn('id', 'id_stnk');
});
}
public function down()
{
Schema::table('stnk', function(Blueprint $table) {
$table->renameColumn('id_stnk', 'id');
});
}
}
Ответ 2
Первое, что вы хотите сделать, это создать файл миграции.
Введите в командной строке
php artisan make:migration rename_stk_column --table="YOUR TABLE" --create
После создания файла. Откройте новый созданный файл миграции в папке вашего приложения в базе данных/миграции.
В вашем методе up вставьте это:
Schema::table('stnk', function(Blueprint $table)
{
$table->renameColumn('id', 'id_stnk');
});
}
и в вашем методе дауна:
Schema::table('stnk', function(Blueprint $table)
{
$table->renameColumn('id_stnk', 'id);
});
}
затем в командной строке просто введите
php artisan migrate
Тогда воллах! Вы только что переименовали идентификатор в id_stnk.
Кстати, вы можете использовать
php artisan migrate:rollback
чтобы отменить изменения. Удачи
Ответ 3
Переименование столбцов (Laravel 5.x)
Чтобы переименовать столбец, вы можете использовать метод renameColumn в построителе схемы. * Перед переименованием столбца обязательно добавьте зависимость doctrine/dbal в ваш файл composer.json. *
Или вы можете просто потребовать пакет с помощью композитора...
composer require doctrine/dbal
Источник: https://laravel.com/docs/5.0/schema#renaming-columns
Примечание: используйте make: миграцию, а не мигрируйте: make для Laravel 5.x
Ответ 4
Бросив мои $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');
});
}
Надеюсь, это спасет кого-то в будущем!
Ответ 5
Выполните следующие действия, соответственно, для переименования файла миграции столбцов.
1- Есть ли в вашем проекте библиотека Doctrine/dbal. Если вы сначала не запускали команду
composer require doctrine/dbal
2- создать файл миграции для обновления старого файла миграции.
Предупреждение (необходимо иметь одинаковое имя)
php artisan make:migrate 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- Наконец, запустите команду переноса
php artisan migrate
Ссылка на источник: документlaravel
Ответ 6
Вышеупомянутый ответ велик, или если это не повредит вам, просто отмените миграцию и измените имя и снова выполните миграцию.
php artisan migrate:rollback