마이그레이션에서 기존 테이블에 새 열 추가


270

Laravel 프레임 워크를 사용하여 기존 데이터베이스 테이블에 새 열을 추가하는 방법을 알 수 없습니다.

다음을 사용하여 마이그레이션 파일을 편집하려고했습니다 ...

<?php

public function up()
{
    Schema::create('users', function ($table) {
        $table->integer("paid");
    });
}

터미널에서 php artisan migrate:install및을 실행 migrate합니다.

새 열을 어떻게 추가합니까?


발생하는 오류를 포함시킬 수 있다면 유용 할 것입니다. 당신은 어떻게 될 것으로 기대합니까; 실제로 어떤 일이 발생합니까?
Phill Sparks

9
좋은 질문입니다. 많은 마이그레이션 문서가 있으며 API와 FIRST TIME 테이블을 작성하는 방법을 보여줍니다. 그런 다음 앱을 더 개발하고 db 구조를 수정해야 할 때 모두 실패합니다.
Andrew Koper

답변:


610

마이그레이션을 생성하기 위해 Artisan CLI에서 migrate : make 명령을 사용할 수 있습니다. 기존 모델과의 충돌을 피하려면 특정 이름을 사용하십시오.

라 라벨 3

php artisan migrate:make add_paid_to_users

라 라벨 5 이상 :

php artisan make:migration add_paid_to_users_table --table=users

그런 다음 Schema::table()새 테이블을 작성하지 않고 기존 테이블에 액세스 할 때 메소드 를 사용해야합니다 . 그리고 다음과 같은 열을 추가 할 수 있습니다.

public function up()
{
    Schema::table('users', function($table) {
        $table->integer('paid');
    });
}

롤백 옵션을 추가하는 것을 잊지 마십시오.

public function down()
{
    Schema::table('users', function($table) {
        $table->dropColumn('paid');
    });
}

그런 다음 마이그레이션을 실행할 수 있습니다.

php artisan migrate

이것은 모두 라 라벨 3에 대한 문서에서 잘 설명되어 있습니다.

그리고 Laravel 4 / Laravel 5의 경우 :

편집하다:

$table->integer('paid')->after('whichever_column');특정 열 뒤에이 필드를 추가 하는 데 사용 하십시오.


3
Justphp artisan migrate
Phill Sparks

뭔가 잘못되었다. 새 마이그레이션 파일을 만들기 위해 "db : make"를 만듭니다. 그런 다음 Schema :: table ( 'users', function ($ table) {$ table-> integer ( 'paid');}); 그것에. 그리고 "PHP는 장인 마이그레이션"를 실행하지만 치명적인 오류가 점점 : 수 온라인 3 /Applications/XAMPP/xamppfiles/htdocs/adsense/application/migrations/2013_05_28_122527_users.php에없는 재 선언 클래스 사용자
킴 라센

마이그레이션 작성에 대해서도 문서에서 다룹니다. "add_paid_to_users"와 같이보다 구체적인 이름을 지정해야합니다. 이렇게하면 모델 충돌과 충돌하지 않습니다.
Phill Sparks

Laravel 3 문서 URL이 Laravel 4 문서로 리디렉션되는 것처럼 보입니다. 여기에 대한 3 문서에 대한 링크입니다 스키마 빌더마이그레이션

6
라 라벨 5 현재,이 명령은 다음과 같습니다php artisan make:migration add_paid_to_users
mikelovelyuk

64

Laravel 5.1 이상을 사용하는 향후 독자를위한 mike3875의 답변에 추가하겠습니다.

작업을 더 빨리하기 위해 다음과 같이 플래그 "--table"을 사용할 수 있습니다.

php artisan make:migration add_paid_to_users --table="users"

이것은 추가합니다 updown자동 방법의 내용 :

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('users', function (Blueprint $table) {
        //
    });
}

마찬가지로 --create["table_name"]새 마이그레이션을 만들 때이 옵션을 사용하여 마이그레이션에 더 많은 상용구를 추가 할 수 있습니다. 작은 점이지만 많은 작업을 수행 할 때 유용합니다!


2
Laravel 5.0에서는 Blueprint그렇지 않았습니다. Laravel 5.1에는 추가되었습니다. 설명의 요점 만 있으면됩니다.
Phill Sparks

@PhillSparks 네 말이 맞아 내 실수를 잡아 줘서 고마워 이것을 사용할 수있는 버전을 명확히하기 위해 업데이트했습니다.
camelCase

24

Laravel 5를 사용하는 경우 명령은 다음과 같습니다.

php artisan make:migration add_paid_to_users

사물을 만들기위한 모든 명령 (컨트롤러, 모델, 마이그레이션 등)이 make:명령 아래로 이동되었습니다 .

php artisan migrate 그래도 여전히 동일합니다.


24

라 라벨 5.6 이상

기존 테이블에 FOREIGN KEY로 새 열을 추가하려는 경우.

다음 명령을 실행하여 새 마이그레이션을 작성하십시오. make : migration

예 :

php artisan make:migration add_store_id_to_users_table --table=users

데이터베이스 / 마이그레이션 폴더에 다음과 같은 새 마이그레이션 파일이 있습니다.

2018_08_08_093431_add_store_id_to_users_table.php (댓글 참조)

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddStoreIdToUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {

            // 1. Create new column
            // You probably want to make the new column nullable
            $table->integer('store_id')->unsigned()->nullable()->after('password');

            // 2. Create foreign key constraints
            $table->foreign('store_id')->references('id')->on('stores')->onDelete('SET NULL');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {

            // 1. Drop foreign key constraints
            $table->dropForeign(['store_id']);

            // 2. Drop the column
            $table->dropColumn('store_id');
        });
    }
}

그 후 다음 명령을 실행하십시오.

php artisan migrate

어떤 이유로 든 마지막 마이그레이션을 실행 취소하려면 다음 명령을 실행하십시오.

php artisan migrate:rollback

문서 에서 마이그레이션에 대한 자세한 정보를 찾을 수 있습니다.


1
매우 포괄적이고 적절한 답변. 감사!
musicin3d

17

다음 Schema::create과 같이 초기 방법 내에 새 열을 추가 할 수 있습니다 .

Schema::create('users', function($table) {
    $table->integer("paied");
    $table->string("title");
    $table->text("description");
    $table->timestamps();
});

이미 테이블을 생성 한 경우 새 마이그레이션을 생성하고 다음 Schema::table방법을 사용하여 해당 테이블에 열을 추가 할 수 있습니다 .

Schema::table('users', function($table) {
    $table->string("title");
    $table->text("description");
    $table->timestamps();
});

이 문서는 이것에 대해 상당히 철저하며 버전 3 에서 버전 4 로 너무 많이 변경되지 않았습니다 .


뭔가 잘못되었다. 새 마이그레이션 파일을 만들기 위해 "db : make"를 만듭니다. 그런 다음 Schema :: table ( 'users', function ($ table) {$ table-> integer ( 'paid');}); 그것에. 그리고 "PHP는 장인 마이그레이션"를 실행하지만 치명적인 오류가 점점 : 수 온라인 3 /Applications/XAMPP/xamppfiles/htdocs/adsense/application/migrations/2013_05_28_122527_users.php에없는 재 선언 클래스 사용자
킴 라센

각 마이그레이션을 만들 때 고유 한 이름을 지정해야합니다. 일반적으로 초기 생성은 name create_users_table이고 열을 추가하는 경우 : add_email_password_columns_to_users.
tplaner 12

그렇습니다. 진화론에 따르면, 독창적 인 라 라벨 디자인 철학을 고수하고 add_변경 사항을 추적하기 위해 각 파일 앞에 " "동사 만 사용하는 것이 좋습니다. 이렇게하면 매번 반복 할 때마다 새로운 추가 파일이 생성되므로 버전 제어 등의 변경 사항을 추적하기가 더 쉽습니다. 방금 계속 " create_"을 수정하면 x 직원, 인덱스를 제거하거나 새 열 등을 추가하여 무언가를 엉망으로 만들었다는 것을 알기가 어려울 것입니다. :)
wired00

7

테이블에 열을 추가 한 다음 터미널에 다음과 같이 기존 마이그레이션 파일을 간단히 수정할 수 있습니다.

$ php artisan migrate:refresh

11
새로 고침으로 테이블이
비워짐

8
일부 사람들은 이전 버전을 실행하면 새로운 버전을 사용하게되며 혼돈이 발생할 수 있습니다. Liquibase에서 파일을 편집하면 파일을 허용하기 위해 예외를 명시 적으로 지정하지 않으면 파일이 실패하며 아주 적은 경우에만이를 수행 할 수 있습니다. 예를 들어 일부 데이터베이스에 이미 널 데이터가있을 때 열을 널이 아닌 값으로 만들면 끊어집니다.
John Little

3
답을 편집하고 테이블을 비울 것이라고 언급하면 ​​더 좋습니다.
Abel

참고 : 이 명령은 전체 데이터베이스 테이블정리 합니다. 사용하려는 경우 먼저 데이터베이스를 백업하십시오.
Udhav Sarvaiya

5

이 것은 laravel 5.1에서 작동합니다.

먼저 터미널 에서이 코드를 실행하십시오.

php artisan make:migration add_paid_to_users --table=users

그 후 프로젝트 디렉토리로 이동하여 디렉토리 데이터베이스를 확장하십시오-마이그레이션 및 add_paid_to_users.php 파일을 편집 하고이 코드를 추가하십시오

public function up()
{
    Schema::table('users', function (Blueprint $table) {
         $table->string('paid'); //just add this line
    });
}

그 후 터미널로 돌아가서이 명령을 실행하십시오.

php artisan migrate

이 도움을 바랍니다.


5

먼저 이전 마이그레이션을 롤백

php artisan migrate:rollback

그런 다음 기존 마이그레이션 파일을 수정하고 (새로 추가, 열 이름 바꾸기 또는 삭제) 마이그레이션 파일을 다시 실행하십시오.

php artisan migrate

0

다른 사람들이 언급했듯이 마이그레이션 파일이 모범 사례이지만, 꼬집음으로 땜장이가있는 열을 추가 할 수도 있습니다.

$ php artisan tinker

다음은 터미널에 대한 예제 하나의 라이너입니다.

Schema::table('users', function(\Illuminate\Database\Schema\Blueprint $table){ $table->integer('paid'); })



(여기에서는 가독성을 위해 형식화되어 있습니다)

Schema::table('users', function(\Illuminate\Database\Schema\Blueprint $table){ 
    $table->integer('paid'); 
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.