我有如下所述的专栏:
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" 中添加了一个 "doctrine / dbal" 并执行了一个 {3 }.
我进行了迁移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)
您需要创建另一个迁移文件 - 并将其放置在其中:
跑
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');
});
'from' 我的旧列名和 'to' 我的新列名
4-最后运行迁移命令
php artisan migrate
来源链接: laravel document
NOT:此功能支持从 laravel 5.x 到 8.x 版本。
您要做的第一件事是创建迁移文件。
输入你的命令行
php artisan make:migration rename_stk_column --table="YOUR TABLE" --create
创建文件后。在数据库/迁移下的应用文件夹中打开新创建的迁移文件。
在你的 up 方法中插入:
Schema::table('stnk', function(Blueprint $table)
{
$table->renameColumn('id', 'id_stnk');
});
}
在你的 down 方法中:
Schema::table('stnk', function(Blueprint $table)
{
$table->renameColumn('id_stnk', 'id);
});
}
然后在你的命令行中输入
php artisan migrate
然后哇!您刚刚将 id 重命名为 id_stnk。顺便说一句,您可以使用
php artisan migrate:rollback
撤消更改。祝你好运
重命名列 (Laravel 5.x)
要重命名列,您可以使用模式构建器上的 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
把我的 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
,因为最新版本的学说/dbal 仍然会引发错误。
请记住,如果您已经使用更高版本,则此答案可能不适合您。
上面的答案很好,或者如果它不会伤害你,只需回滚迁移并更改名称并再次运行迁移。
php artisan migrate:rollback
stnk
表上的id
。make:migration
而不是migrate:make
"doctrine/dbal": "~2.3"
中删除的包,否则您会遇到一些非常晦涩的错误。它在此处作为错误提出 github.com/laravel/framework/issues/3116,并且在此处的文档中提及的用处可能较少 laravel.com/docs/5.0/schema#renaming-columns