ホーム » migrationについて

migrationについて

マイグレーションとは、データベースのバージョン管理のようなものです。

複数人で開発する場合や、別の環境へデータベースの状態をコピーしたい場合などに有効です。
毎回マイグレーションしたら結果が同じになるので、作業の抜け漏れなどもなくなります。
逆に、毎回マイグレーションして違う結果になる場合は、マイグレーションの使い方を間違っているので、そういった場合は注意が必要です。

migrationは、Schemaファサードを利用します「Illuminate\Database\Schema\Builder
use Illuminate\\Support\\Facades\\Schema;」を呼んで、こちらから、「Illuminate\Database\Schema\Builder」を呼んでいます。

マイグレーションのファイル名について

マイグレーションのファイル名はTableGuesserクラスに、書き方が書いてあります。
こちらの正規表現を元に名前が決定します。

const CREATE_PATTERNS = [
    '/^create_(\w+)_table$/',
    '/^create_(\w+)$/',
];

const CHANGE_PATTERNS = [
    '/_(to|from|in)_(\w+)_table$/',
    '/_(to|from|in)_(\w+)$/',
];

なので、

sail php artisan make:migration create_books_table

と書けば、テーブル新規作成

sail php artisan make:migration udpate_name_in_books_table
# オプションでも出来ます
sail php artisan make:migration update_books_name_table --table=books

と書けば、テーブル変更になります。

マイグレーションの圧縮

マイグレーションの圧縮をすることによあって1つのファイルにすることが出来ます。

sail php artisan schema:dump

マイグレーションの圧縮は、MySQL、PostgreSQL、SQLiteデータベースでのみ利用可能です。
database/schemes配下にdumpファイルが作成されます(中身はSQLファイルです)

マイグレーションの構造

マイグレーションファイルには、2つのメソッドがあります。
upとdown。

upは、マイグレーションの実行です。
downは、マイグレーションのロールバックです。(実行した結果を取り消す)

Schemaのcreateは2つの引数を持ってます。
1つ目は、テーブル名
2つ目は、Blueprintオブジェクト
Blueprintオブジェクトの$tableのメソッドを利用してカラムを定義していきます。
※Blueprintは深追いしなくても大丈夫です。

デフォルト以外のDBに接続する場合

デフォルト以外のDBに接続する場合は、下記コマンドを追加します。

protected $connection = 'pgsql';

マイグレーションの実行・確認・ロールバックの方法について

# migrationを実行する
sail php artisan migrate

# migrationの状況を確認する
sail php artisan migrate:status

# migrationのロールバック
# ローカルでマイグレーションを実行するときは、後に戻せなくなると困るので、必ずrollbackも試すと良いです。
sail php artisan migrate:rollback

その他にもマイグレーションのコマンドがあります。

# 全てのmigrationをロールバックします
sail php artisan migrate:reset

# 全てのマイグレーションをロールバックしてから、再度migrateする
sail php artisan migrate:refresh

# データベースを作り直し、データベースの初期設定を実行する(初期設定時はこれをやる)
sail php artisan migrate:refresh --seed

# 全てのテーブルを削除後にマイグレーションする
sail php artisan migrate:fresh
sail php artisan migrate:fresh --seed

1つ前のマイグレーションの変更をロールバックして再実行する方法について

# sailを利用する場合
sail php artisan migrate:rollback && sail php artisan migrate
# または、sailを利用しない場合
php artisan migrate:rollback && php artisan migrate

カラム変更について

カラムを変更するには、doctrineというパッケージが必要になります。
必要に応じて、下記コマンドでインストールしてください。

sail composer require doctrine/dbal

カラムの変更、リネーム、削除は下記で行います

## カラムの変更
# change()を利用します。
Schema::table('users', function (Blueprint $table) {
    $table->string('name', 50)->change();
});
# こちらは別の例です。
Schema::table('books', function (Blueprint $table) {
    $table->string('name', 50)->nullable()->change();
});

## カラムのリネーム
Schema::table('books', function (Blueprint $table) {
    $table->renameColumn('from', 'to');
});

## カラムの削除
Schema::table('books', function (Blueprint $table) {
    $table->dropColumn('votes');
});

# 複数カラムの削除
Schema::table('books', function (Blueprint $table) {
    $table->dropColumn(['votes', 'avatar', 'location']);
});

# deleted_atカラムを削除(これはソフトデリート)
$table->dropSoftDeletes();

# deleted_atカラムを追加時 
$table->softDeletes();

# created_atカラムとupdated_atカラムを削除
$table->dropTimestamps();

# created_atカラムとupdated_atカラムを追加時
$table->timestamps();

利用可能なカラムタイプ

まずはこれだけ覚えれば、というか使えればいいです。

// string型(デフォルト255、第2引数にカラムの長さを指定します)
$table->string('name', 100);
// テキスト型
$table->text('description');
// idを指定します。autoincrementでかつ、bigintのunsignedになります。
$table->id();
// int型(int、small、big)
$table->tinyInteger('status_code')
$table->integer('status_code');
$table->smallInteger('status_code');
$table->bigInteger('status_code');
// created_atとupdated_atが追加されます。
$table->timestamps();
// boolean型(true/false)
$table->boolean('is_active');
// char型(第2引数にカラムの長さを指定します)
$table->char('name', 100);
// dateTime型
$table->dateTime('created_at');
// date型
$table->date('created_at');
// ソフトデリート
$table->softDeletes();

利用可能なカラム修飾子(しゅうしょくし)

まずはここらへんを使えればいいです。
※メソッドチェーンして利用ください。

->comment('my comment')
->default($value)
->after('column')
->autoIncrement()
->nullable($value = true)