수색…


마이그레이션

Laravel에서 데이터베이스를 제어하는 ​​것은 마이그레이션을 사용하는 것입니다. 숙련공과 함께 마이그레이션을 만듭니다.

php artisan make:migration create_first_table --create=first_table

그러면 CreateFirstTable 클래스가 생성됩니다. 위로 메서드 내에서 열을 만들 수 있습니다.

<?php

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

class CreateFirstTable extends Migration
{
    public function up()
    {
        Schema::create('first_table', function (Blueprint $table) {
            $table->increments('id');
            $table->string('first_string_column_name');
            $table->integer('secont_integer_column_name');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::drop('first_table');
    }
} 

끝으로 모든 마이그레이션 클래스를 실행하려면 artisan 명령을 실행할 수 있습니다.

php artisan migrate

이렇게하면 데이터베이스에 테이블과 컬럼이 생성됩니다. 기타 유용한 마이그레이션 명령은 다음과 같습니다.

  • php artisan migrate:rollback - 롤백 마지막으로 데이터베이스 마이 그 레이션
  • php artisan migrate:reset - 모든 데이터베이스 마이그레이션 롤백
  • php artisan migrate:refresh - 모든 이전 재설정 및 다시 실행
  • php artisan migrate:status - 각 이전 상태를 표시합니다.

기존 테이블 수정하기

때로는 열의 renaming/deleting 와 같은 기존 테이블 구조를 변경해야합니다. 새로운 마이그레이션을 생성하여 달성 할 수 있습니다. 그리고 마이그레이션의 up 방법에서.

//Renaming Column.

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->renameColumn('email', 'username');
    });
}

위의 예에서는 users tableemail column 이름을 username 바꿉니다. 아래 코드는 users 테이블에서 열 username 을 삭제합니다.

중요 : 열을 수정하려면 프로젝트의 composer.json 파일에 doctrine/dbal 종속성을 추가하고 변경 사항을 반영하기 위해 composer update 를 실행해야합니다.

//Droping Column
public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->dropColumn('username');
    });
}

마이그레이션 파일

Laravel 5 응용 프로그램의 database/migrationsdatabase/migrations 디렉토리에 있습니다. 파일 이름은 특정 형식을 따릅니다.

<year>_<month>_<day>_<hour><minute><second>_<name>.php

하나의 마이그레이션 파일은 특정 문제를 해결하기 위해 스키마 업데이트를 나타냅니다. 예 :

2016_07_21_134310_add_last_logged_in_to_users_table.php

데이터베이스 마이그레이션은 Laravel이 실행 순서를 알 수 있도록 연대순으로 유지됩니다. Laravel은 항상 가장 오래된 것부터 가장 최신의 것으로 마이 그 레이션을 실행합니다.

마이그레이션 파일 생성

스키마를 변경해야 할 때마다 올바른 파일 이름으로 새 마이그레이션 파일을 작성하는 것은 어려움이됩니다. 고맙게도 Laravel의 artisan 명령은 마이그레이션을 생성 할 수 있습니다.

php artisan make:migration add_last_logged_in_to_users_table

위의 명령에 --table--create 플래그를 사용할 수도 있습니다. 이들은 편의를 위해 선택 사항이며 해당 상용구 코드를 마이그레이션 파일에 삽입합니다.

php artisan make:migration add_last_logged_in_to_users_table --table=users

php artisan make:migration create_logs_table --create=logs

--path 옵션을 사용하여 생성 된 마이그레이션에 대한 사용자 정의 출력 경로를 지정할 수 있습니다. 경로는 응용 프로그램의 기본 경로와 관련이 있습니다.

php artisan make:migration --path=app/Modules/User/Migrations

데이터베이스 마이그레이션 내부

각 이주에는 up() 메소드와 down() 메소드가 있어야합니다. up() 메서드의 목적은 데이터베이스 스키마를 새 상태로 만들기 위해 필요한 작업을 수행하고 down() 메서드의 목적은 up() 메서드에 의해 수행 된 작업을 취소하는 것입니다. 데이터베이스 스키마 변경 내용을 롤백 할 수 있으려면 down() 메서드가 작업을 올바르게 되돌려 놓아야합니다.

마이그레이션 파일의 예는 다음과 같습니다.

<?php

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

class AddLastLoggedInToUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dateTime('last_logged_in')->nullable();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('last_logged_in');
        });
    }
}

이 마이그레이션을 실행할 때 Laravel은 데이터베이스에 대해 실행할 다음 SQL을 생성합니다.

ALTER TABLE `users` ADD `last_logged_in` DATETIME NULL

마이그레이션 실행

마이그레이션이 작성되면이를 실행하여 데이터베이스에 작업을 적용합니다.

php artisan migrate

모든 것이 잘되면, 다음과 비슷한 결과를 볼 수 있습니다 :

Migrated: 2016_07_21_134310_add_last_logged_in_to_users_table

Laravel은 프로덕션 환경에서 마이그레이션을 실행할 때 알기에 충분히 똑똑합니다. 파괴적인 마이그레이션 (예 : 테이블에서 열을 제거하는 마이그레이션)을 수행하고 있음을 감지하면 php artisan migrate 명령이 확인을 요청합니다. 지속적인 전달 환경에서는 이것이 바람직하지 않을 수 있습니다. 이 경우 --force 플래그를 사용하여 확인을 건너 뜁니다.

php artisan migrate --force

마이그레이션 만 실행했다면 데이터베이스에 migrations 테이블이 있는지 혼란 스러울 수 있습니다. 이 테이블은 Laravel이 이미 실행 된 마이그레이션을 추적하기 위해 사용하는 테이블입니다. migrate 명령을 실행할 때 Laravel은 아직 실행되지 않은 마이그레이션을 결정한 다음이를 순서대로 실행 한 다음 migrations 테이블을 적합하게 업데이트합니다.

자신이하는 일을 절대적으로 알지 못한다면 migrations 테이블을 수동으로 편집해서는 안됩니다. 실수로 데이터베이스를 마이그레이션 상태가 실패한 상태로 만드는 것은 매우 쉽습니다.

마이그레이션 롤백

최근 마이그레이션 즉, 최근 작업을 롤백하려는 경우 멋진 rollback 명령을 사용할 수 있습니다. 그러나이 명령은 여러 마이그레이션 파일을 포함 할 수있는 마지막 마이그레이션 만 롤백합니다

php artisan migrate:rollback

모든 응용 프로그램 마이그레이션 롤백에 관심이있는 경우 다음 명령을 사용할 수 있습니다

php artisan migrate:reset 

또한 나처럼 게으르고 한 명령으로 롤백 및 마이그레이션하려는 경우이 명령을 사용할 수 있습니다

php artisan migrate:refresh
php artisan migrate:refresh --seed

step 옵션으로 롤백 할 step 수를 지정할 수도 있습니다. 이렇게하면 1 단계가 롤백됩니다.

php artisan migrate:rollback --step=1


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow