Help us understand the problem. What is going on with this article?

LaravelのMigrationについて調べた結果

More than 3 years have passed since last update.

LaravelのMigrationについて

  • 公式ドキュメント

  • 公式ドキュメント引用

    マイグレーションとはデータベースのバージョンコントロールのようなもので、
    チームでアプリケーションデータベースのスキーマを簡単に更新し共有できるようにしてくれます。
    通常、マイグレーションはアプリケーションのデータベーススキーマを簡単に構築できるようにする、
    Laravelのスキーマビルダーと一緒に使用します。

コマンド一覧

migrate              Run the database migrations
migrate:install      Create the migration repository
migrate:refresh      Reset and re-run all migrations
migrate:reset        Rollback all database migrations
migrate:rollback     Rollback the last database migration
migrate:status       Show the status of each migration

migrate

  • Migrationを実行します
  • 実行したMigrationはテーブル migrations に登録されます

    +----------------------------------------+-------+
    | migration                              | batch |
    +----------------------------------------+-------+
    | 2016_08_08_155034_create_videos_lookup |     1 |
    | 2016_08_08_155046_create_videos        |     1 |
    | 2016_08_17_155046_modified_videos      |     1 |
    +----------------------------------------+-------+
    
  • テーブル migrations に登録されたMigrationは migrate コマンドで実行されません

    • このため新規作成と変更と別々のMigrationを作成する必要があります
    • テーブルのバージョン管理です

migrate:install

  • migrations テーブルを作成します
  • ただそれだけ

migrate:refresh

  • Migrationを再実行してテーブルを再構築します
  • Migrationが存在するテーブルは全て初期化されます
    • データも全て吹っ飛びます(!要注意!)
  • テスト環境でテーブル定義を作りなおした時なんかに使える
  • 本番で使わないこと!

migrate:reset

  • 全てのMigration操作を元に戻す
  • 元に戻すっていうかテーブル全部削除する感じ??

migrate:rollback

  • 一つ前のMigration操作を元に戻す
  • migrations で管理されている batch カラムで制御している
  • migrations テーブルが以下の状態でコマンドを打つと 2016_08_17_155811_ModifyVideos2 の操作がロールバックされる

    +----------------------------------------+-------+
    | migration                              | batch |
    +----------------------------------------+-------+
    | 2016_08_08_155034_create_videos_lookup |     1 |
    | 2016_08_08_155046_create_videos        |     1 |
    | 2016_08_17_155520_ModifyVideos         |     1 |
    | 2016_08_17_155811_ModifyVideos2        |     2 |
    +----------------------------------------+-------+
    
  • コマンド実行後の migrations

    +----------------------------------------+-------+
    | migration                              | batch |
    +----------------------------------------+-------+
    | 2016_08_08_155034_create_videos_lookup |     1 |
    | 2016_08_08_155046_create_videos        |     1 |
    | 2016_08_17_155520_ModifyVideos         |     1 |
    +----------------------------------------+-------+
    

migrate:status

  • Migrationファイルと実行状況を見ることができる

    +------+----------------------------------------+
    | Ran? | Migration                              |
    +------+----------------------------------------+
    | Y    | 2016_08_08_155034_create_videos_lookup |
    | Y    | 2016_08_08_155046_create_videos        |
    | Y    | 2016_08_17_155520_ModifyVideos         |
    | N    | 2016_08_17_155811_ModifyVideos2        |
    +------+----------------------------------------+
    

Migrationで運用する方法を考える

テーブル新規作成

  • LaravelのMigrationを使用する

Migrationファイルを作成

  • Laravelプロジェクトのルートへ移動
  • Migrationファイル作成コマンドを打つ

    php artisan make:migration [migration ファイル名]
    
    ex) php artisan make:migration CreateVideos
    
  • Migrationファイルは以下ディレクトリに作成される

    database/migrations/[作成日時]_modified_videos.php
    ex) `database/migrations/2016_08_08_155046_create_videos.php
    

Migrationにテーブル定義を記述

  • 作成したMigrationファイルにテーブル定義を記述していく
  • 記述方法の詳しいドキュメントは以下

  • 作成例

    public function run()
    {
        // videos テーブルを作成する処理
       Schema::create('videos', function (Blueprint $table){
            $table->engine = 'InnoDB';
    
            $table->increments('id');
            $table->string('title');
            $table->string('description');
            $table->timestamps();
            $table->softDeletes();
       });
    }
    
    public function down(){}
    

Migrationコマンドを実行

  • 作成したMigrationを実行してテーブルを新規作成する

    php artisan migrate
    
  • これでテーブルが新規作成される

  • 一度実行したMigrationはテーブルmigrationsに記録され上記コマンドで再実行されることはない

テーブル定義変更

  • LaravelのMigrationを使用して定義を変更する
  • 一度実行したMigrationファイルはphp artisan migrateで再実行されることがないので、定義変更用のMigrationファイルを作る必要がある

Migrationファイルを作成

  • 基本的に新規作成時と同じ

    php artisan make:migration [migration ファイル名]
    
    ex) php artisan make:migration ModifyVideos
    

Migrationに変更したい定義を記述

  • 作成したMigrationファイルにテーブル定義を記述していく
  • 記述方法の詳しいドキュメントは以下

  • 作成例

    public function run()
    {
        // videos テーブル定義を変更する
       Schema::table('videos', function (Blueprint $table){
    
         // 新規カラムを追加する
            $table->string('new_column');
    
            // カラムの定義を変更する
            $table->string('original_file_name')->nullable()->change();
       });
    }
    
    public function down(){}
    

Migrationコマンドを実行

  • 作成したMigrationを実行してテーブル定義を変更する

    php artisan migrate
    
  • これでテーブル定義が変更される

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした