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

时间:2014-10-23 06:18:52

标签: php mysql database laravel migration

我有下面提到的专栏:

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');
    });

}

我已将播种机制作成表格

现在我想将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)

7 个答案:

答案 0 :(得分:72)

您需要创建另一个迁移文件 - 并将其放在那里:

运行

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 :(得分:16)

您要做的第一件事就是创建迁移文件。

输入您的命令行

php artisan migrate:make rename_stk_column --table="YOUR TABLE" --create

创建文件后。在database / migrations下的app文件夹中打开新创建的迁移文件。

在你的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

撤消更改。古德勒克

答案 2 :(得分:9)

重命名列(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

答案 3 :(得分:7)

在这里投入我的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');
    });
}

希望将来能节省一些时间!

答案 4 :(得分:7)

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:migrate 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

答案 5 :(得分:1)

上面的答案非常好,或者如果它不会对您造成伤害,只需回滚迁移并更改名称并再次运行迁移即可。

 php artisan migrate:rollback

答案 6 :(得分:1)

我知道这是一个老问题,但我最近在 Laravel 7 应用程序中遇到了同样的问题。 为了使重命名列起作用,我使用了 this 答案中的提示,而不是 composer require doctrine/dbal 我发布了 composer require doctrine/dbal:^2.12.1,因为最新版本的学说/dbal 仍然会引发错误。

请记住,如果您已经使用了更高版本,则此答案可能不适合您。