web-dev-qa-db-ja.com

移行を使用してlaravelの列の名前を変更するにはどうすればよいですか?

私は以下の列を持っています:

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"を追加し、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)
57
Ariasa

別の移行ファイルを作成する必要があります-そして、そこに配置します:

走る

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

}
81
Laurence

最初に行うことは、移行ファイルを作成することです。

コマンドラインに入力してください

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

変更を元に戻します。幸運を

18
webartisan

列名の変更(Laravel 5.x)

列の名前を変更するには、スキーマビルダーのrenameColumnメソッドを使用できます。 *列の名前を変更する前に、必ず doctrine/dbal を追加してください= composer.jsonファイルへの依存。*

または、composerを使用してパッケージを単に要求することができます...

composer require doctrine/dbal

出典:https://laravel.com/docs/5.0/schema#renaming-columns

注:make:migrationではなくmigrate:makefor Laravel 5.x

11
bmatovu

答えがまったく機能しなかったので、ここに$ 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');
    });
}

これが将来誰かを救うことを願っています!

7
Stan Smulders

列移行ファイルの名前を変更するには、それぞれ次の手順を実行します。

1-プロジェクトにDoctrine/dbalライブラリがあります。最初にコマンドを実行していない場合

composer require doctrine/dbal

2-古い移行ファイルを更新するための移行ファイルを作成します。警告(同じ名前が必要です)

php artisan make:migrate 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-最後にmigrateコマンドを実行します

php artisan migrate

ソースリンク:laravel document

7
melih sahin

上記の答えは素晴らしいか、それがあなたを傷つけないなら、移行をロールバックして名前を変更し、移行を再度実行してください。

 php artisan migrate:rollback
1
jay temp