我有如下提到的专栏:
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
。composer update
。我已经迁移了
php artisan migration:make 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)
您需要创建另一个迁移文件 - 并将其放在其中:
奔跑
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');
});
}
}
按照以下步骤分别重命名列迁移文件。
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- 最后运行迁移命令
php artisan migrate
源码链接:laravel文档
注意: 此功能支持 laravel 5.x 到 8.x 版本。
更新: 版本 9 之后这个过程变得更加容易 您所要做的就是使用“Schema”外观的“重命名”静态方法。
use Illuminate\Support\Facades\Schema;
Schema::rename($from, $to);
来源链接: laravel document-9.x
您要做的第一件事是创建迁移文件。
在命令行中输入
php artisan make:migration rename_stk_column --table="YOUR TABLE" --create
创建文件后。在您的应用程序文件夹中的database/migrations 下打开新创建的迁移文件。
在你的 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 重命名为 id_stnk。 顺便说一句,你可以使用
php artisan migrate:rollback
撤消更改。祝你好运
要重命名列,您可以使用架构构建器上的 renameColumn 方法。 在重命名列之前,请务必将 doctrine/dbal 依赖项添加到您的composer.json 文件中。
或者您可以简单地使用 Composer 来获取包...
composer require doctrine/dbal
来源:https://laravel.com/docs/5.0/schema#renaming-columns
注意: 对于 Laravel 5.x,请使用 make:migration 而不是 migrate:make
从 Laravel 9 开始重命名数据库列时删除 Doctrine 依赖#45258
我把 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');
});
}
希望这可以在将来节省某人的时间!
要重命名列,您可以使用架构构建器上的 renameColumn 方法。
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('from', 'to');
});
我知道这是一个老问题,但我最近在 Laravel 7 应用程序中遇到了同样的问题。 为了使重命名列起作用,我使用了 this 答案中的提示,而不是
composer require doctrine/dbal
我已经发布了 composer require doctrine/dbal:^2.12.1
,因为最新版本的doctrine/dbal 仍然会引发错误。
请记住,如果您已经使用更高版本,则此答案可能不适合您。
如果您不想使用 doctrine/dbal 包,请使用查询数据库语句。例如:
public function up()
{
DB::statement('ALTER TABLE table_name CHANGE from to VARCHAR(200)');
}
public function down()
{
DB::statement('ALTER TABLE table_name CHANGE to from VARCHAR(200)');
}
只需按照以下步骤进行即可
第1步:安装dbal包
composer require doctrine/dbal
第 2 步:创建迁移并更新,如下所示
Schema::table('your original table name', function (Blueprint $table) {
$table->renameColumn('old column name', 'new column name');
});
第 3 步:运行 artisan 命令
php artisan migrate
完整描述链接:https://www.webjourney.dev/how-to-rename-table-column-in-laravel-webjourney
就我而言,我将一个列命名为“avitar”并希望它成为“avatar”。
我跑了:
php artisan make:migration rename_avitar_in_users_table --table=users
生成了我添加的样板文件:
$table->renameColumn('avitar', 'avatar'); // 向上
$table->renameColumn('avitar', 'avatar'); // 向下
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('avitar', 'avatar');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('avitar', 'avatar');
});
}
但是,当我跑步时这不起作用:
php artisan migrate
修复方法是安装:
composer require doctrine/dbal
我希望这可以帮助解决类似问题的人。 -史蒂夫
上面的答案很好,或者如果它不会伤害您,只需回滚迁移并更改名称并再次运行迁移即可。
php artisan migrate:rollback