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