How can I rename column in laravel using migration?
Solution 1
You need to create another migration file - and place it in there:
Run
Laravel 4: php artisan migrate:make rename_stnk_column
Laravel 5: php artisan make:migration rename_stnk_column
Then inside the new migration file place:
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');
});
}
}
Solution 2
Follow these steps, respectively for rename column migration file.
1- Is there Doctrine/dbal library in your project. If you don't have run the command first
composer require doctrine/dbal
2- create update migration file for update old migration file. Warning (need to have the same name)
php artisan make:migration update_oldFileName_table
for example my old migration file name: create_users_table update file name should : update_users_table
3- update_oldNameFile_table.php
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('from', 'to');
});
'from' my old column name and 'to' my new column name
4- Finally run the migrate command
php artisan migrate
Source link: laravel document
NOT: This feature supports from laravel 5.x to 8.x version.
Solution 3
first thing you want to do is to create your migration file.
Type in your command line
php artisan make:migration rename_stk_column --table="YOUR TABLE" --create
After creating the file. Open the new created migration file in your app folder under database/migrations.
In your up method insert this:
Schema::table('stnk', function(Blueprint $table)
{
$table->renameColumn('id', 'id_stnk');
});
}
and in your down method:
Schema::table('stnk', function(Blueprint $table)
{
$table->renameColumn('id_stnk', 'id);
});
}
then in your command line just type
php artisan migrate
Then wollah! you have just renamed id to id_stnk. BTW you can use
php artisan migrate:rollback
to undo the changes. Goodluck
Solution 4
Renaming Columns (Laravel 5.x)
To rename a column, you may use the renameColumn method on the Schema builder. *Before renaming a column, be sure to add the doctrine/dbal dependency to your composer.json file.*
Or you can simply required the package using composer...
composer require doctrine/dbal
Source: https://laravel.com/docs/5.0/schema#renaming-columns
Note: Use make:migration and not migrate:make for Laravel 5.x
Solution 5
Throwing my $0.02 in here since none of the answers worked, but did send me on the right path. What happened was that a previous foreign constraint was throwing the error. Obvious when you think about it.
So in your new migration's up
method, first drop that original constraint, rename the column, then add the constraint again with the new column name. In the down
method, you do the exact opposite so that it's back to the sold setting.
/**
* 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');
});
}
Hope this saves someone some time in the future!
Related videos on Youtube
Ariasa
I learn more i need it becuase i know live is struggle. important thing is experience, not at all about money.
Updated on July 08, 2022Comments
-
Ariasa almost 2 years
I have columns as mentioned bellow:
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'); }); }
I have made seeder to stnk table
Now I want to rename
id
toid_stnk
.
I've added a "doctrine / dbal" in the "composer" and do acomposer update
.I've made migration
php artisan migration:make rename_column
.
Then I've added new method to rename_column:Schema::table('stnk', function(Blueprint $table) { $table->renameColumn('id', 'id_stnk'); });
And then I've tried to run command
php artisan migrate
but I got error as mentioned bellow:[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)
-
Ariasa over 9 yearsi have eddit my question above, look at now.. i have error message in gitbash
-
Ariasa over 9 yearsi have eddit my question above, look at now.. i have error message in gitbash
-
Ariasa over 9 yearsi have eddit my question above, look at now.. i have error message in gitbash
-
Laurence over 9 yearsError 150 is a foreign key restraint. It means you have other tables that reference the
id
on thestnk
table. -
Jason about 9 yearsNote for Laravel 5 it is now
make:migration
and notmigrate:make
-
Jason about 9 yearsAlso for column renaming to work, you need to require a package that was removed in L5
"doctrine/dbal": "~2.3"
Without that you get some very obscure errors. It was raised as a bug here github.com/laravel/framework/issues/3116 and with an arguably less useful mention in the documentation here laravel.com/docs/5.0/schema#renaming-columns -
mikoop about 7 yearsJust dont use any columns as an ENUM in the table you are trying to edit. Doctrine/dbal does not know what this is..... I had to change the original migration to be correct name at the start and reset whole database. Lucky I was still in development. I would of though Laravel & Co would make this a dependency in composer from the start?
-
J. Bruni almost 7 years@mikoop It originaly was a dependency from the start, in earlier versions of the framework. But this dependency is too heavy and not commonly used. So it has been removed. (This is the summary; there were lots of discussion before the decision. In fact, community has asked for its removal, and has been heard.)
-
Sander Visser over 6 yearsrenameColumn was deprecated in doctrine, and currently removed.
-
Ben over 4 yearsBe sure to add the doctrine/dbal dependency to your composer.json file.
-
orbitory almost 4 yearsOnce the migration was done, should the file be deleted and the original create schema updated? Just asking how to keep things clean
-
Attila Fulop about 3 years"Throwing my $0.02" 😄 👌