마이그레이션을 사용하여 laravel에서 열의 이름을 어떻게 바꿀 수 있습니까?


92

아래에 언급 된 열이 있습니다.

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 테이블에 시더를 만들었습니다.

이제 이름 idid_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)

답변:


120

다른 마이그레이션 파일을 생성하고 여기에 배치해야합니다.

운영

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

}

나는 위의 내 질문을 eddit했습니다, 지금 봐 .. gitbash에 오류 메시지가 있습니다
Ariasa

오류 150은 외래 키 제한입니다. 그것은 당신이를 참조하는 다른 테이블 의미 id상의 stnk테이블을.
Laurence

3
Laravel 5 주 그것은 지금 make:migration이 아니라migrate:make
제이슨

9
또한 열 이름 변경이 작동하려면 L5에서 제거 된 패키지가 필요 "doctrine/dbal": "~2.3"합니다. 그렇지 않으면 매우 모호한 오류가 발생합니다. 여기 github.com/laravel/framework/issues/3116 에서 버그로 제기되었으며 여기 에있는 문서 laravel.com/docs/5.0/schema#renaming-columns
Jason

마이그레이션이 완료되면 파일을 삭제하고 원래 생성 스키마를 업데이트해야합니까? 깨끗하게 유지하는 방법을 묻는 것
뿐입니다

31

가장 먼저 할 일은 마이그레이션 파일을 만드는 것입니다.

명령 줄에 입력

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

파일을 만든 후. 데이터베이스 / 마이그레이션 아래의 앱 폴더에서 새로 생성 된 마이그레이션 파일을 엽니 다.

귀하의 업 메소드에 다음을 삽입하십시오.

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로 변경했습니다. 사용할 수있는 BTW

php artisan migrate:rollback

변경 사항을 취소합니다. 행운을 빕니다


나는 위의 내 질문을 eddit했습니다. 지금 봐 .. gitbash에 오류 메시지가 있습니다
Ariasa

1
composer.json 파일에 doctrine / dbal 종속성을 추가해야합니다.
Ben

19

열 마이그레이션 파일의 이름을 바꾸려면 다음 단계를 각각 따르십시오.

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 문서


14

열 이름 바꾸기 (Laravel 5.x)

열의 이름을 바꾸려면 스키마 빌더에서 renameColumn 메소드를 사용할 수 있습니다. * 열 이름을 변경하기 전에composer.json 파일에 doctrine / dbal 종속성을합니다. *

또는 composer를 사용하여 패키지를 간단히 요구할 수 있습니다.

composer require doctrine/dbal

출처: https://laravel.com/docs/5.0/schema#renaming-columns

참고 : Laravel 5.x 에서는 migrate : make가 아닌 make : migration을 사용하십시오 .


편집하려는 테이블에서 열을 ENUM으로 사용하지 마십시오. Doctrine / dbal은 이것이 무엇인지 모릅니다 ..... 원래 마이그레이션을 시작시 올바른 이름으로 변경하고 전체 데이터베이스를 재설정해야했습니다. 운 좋게도 아직 개발 중이었습니다. 나는 Laravel & Co가 처음부터 작곡가에서 이것을 종속성으로 만들 것입니까?
mikoop

@mikoop 원래는 프레임 워크의 이전 버전에서 처음부터 종속성이었습니다. 그러나이 종속성은 너무 무겁고 일반적으로 사용되지 않습니다. 그래서 그것은 제거되었습니다. (이 요약입니다 결정하기 전에 많은 토론이 있었다 사실, 커뮤니티의 제거를 요구하고 있으며, 들어있다..)
J. 브루니

renameColumn은 교리에서 더 이상 사용되지 않으며 현재 제거되었습니다.
Sander Visser

10

대답이 전혀 효과가 없었기 때문에 여기에 $ 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');
    });
}

이것이 미래에 누군가의 시간을 절약하기를 바랍니다!


1

위의 대답은 훌륭합니다. 그렇지 않으면 마이그레이션을 롤백하고 이름을 변경하고 마이그레이션을 다시 실행하십시오.

 php artisan migrate:rollback

나는 위의 내 질문을 eddit했습니다. 지금 봐 .. gitbash에 오류 메시지가 있습니다
Ariasa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.