如何使用迁移重命名 laravel 中的列?

2022-08-30 07:12:32

我有如下所述的专栏:

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表

现在我想重命名为.
我在“作曲家”中添加了一个“学说/dbal,并做了一个.idid_stnkcomposer update

我已经进行了迁移。
然后我添加了新方法rename_column: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)

答案 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

请按照以下步骤,分别重命名列迁移文件。

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 版本。


推荐