🔁
Laravel でカラムを追加・変更・削除する場合のマイグレーション
状況
カラムを追加・変更・削除したい.マイグレーションがどんな感じだったか忘れるためメモ.テーブル作成と異なる部分がある.
マイグレーションファイルの作成
カラムの変更もマイグレーションで行う.
本来はカラムはテーブル作成時点で決定しておくことが望ましい.
マイグレーションは実行した内容を取り消せる(ロールバック)ため,不具合が生じても対応できる場合が多い.
コマンドの最後に
_to_テーブル名_table
をつけるとテーブルとの連携を自動でやってくれる.
【例】posts テーブルに hoge カラムを追加したい場合
下記コマンドを実行する.
php artisan make:migration add_hoge_to_posts_table
# 実行結果
Created Migration: xxxx_xx_xx_xxxxxx_add_hoge_to_posts_table
マイグレーションファイルの編集
// database/migrations/xxxx_xx_xx_xxxxxx_add_hoge_to_posts_table.php
public function up()
{
Schema::table('posts', function (Blueprint $table) {
// 🔽 hoge カラムを post カラムの後に追加
$table->string('hoge')->after('post')->nullable();
});
}
public function down()
{
Schema::table('posts', function (Blueprint $table) {
// 🔽 カラム削除
$table->dropColumn(['hoge']);
});
}
マイグレーション実行
以下のコマンドを実行する.テーブルにカラムが追加される.
php artisan migrate
# 実行結果
Migrating: xxxx_xx_xx_xxxxxx_add_hoge_to_posts_table
Migrated: xxxx_xx_xx_xxxxxx_add_hoge_to_posts_table (102.98ms)
【補足】リレーションを表すカラムの場合
マイグレーションファイルを作成する流れは同じ.
「hoge_id
」など,リレーションを表すカラムを追加する場合は,drop
メソッドに注意する必要がある.
この場合,カラムを削除するだけでなく下記の手順が必要になる.
-
カラムの連携を削除する.
-
カラム自体を削除する.
// database/migrations/xxxx_xx_xx_xxxxxx_add_hoge_id_to_posts_table.php
public function up()
{
Schema::table('posts', function (Blueprint $table) {
// 🔽 hoge_id(hogesテーブルのid)を追加する例
$table->foreignId('hoge_id')->after('id')->constrained()->cascadeOnDelete();
});
}
public function down()
{
Schema::table('posts', function (Blueprint $table) {
// 🔽 テーブル連携を削除 → カラム削除
$table->dropForeign(['hoge_id']);
$table->dropColumn(['hoge_id']);
});
}
マイグレーションファイルに記述したら,コマンド実行は同じ.
まとめ
特に外部キー制約を持つカラムを追加・変更・削除する場合はハマることもあるので注意.
以上だ( `・ω・)b
Discussion