Laravel の migration を使って 既存のテーブルのカラムを追加する
sqlコマンドでalter table addすればいいのだけど、今まで php artisan migrate でやってきたのに急にカラムの追加だけsql直打ちはなんだかなぁ、と思ったので調べた。
alter table 用のmigrationファイルを作成
以下のコマンドで既存のテーブルを変更するためのmigrationを生成する。
php artisan make:migration add_カラム名_to_テーブル名 --table=テーブル名
マイグレーションファイル名は任意だがわかりやすいようにしておく。
んで、実行したら、/database/migrations配下に新しいマイグレーションファイルが出来上がっている。
migrationファイルの編集
作成できたマイグレーションファイルを開くと以下のような感じのがでてくるので、upとdownの中身を追記する。
具体的にはupにaddしたいcolumnを、downはcolumnを消すときの処理を追加する
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class Addカラム名Toテーブル名 extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('テーブル名', function (Blueprint $table) {
$table->integer('カラム名')->default(-1);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('テーブル名', function (Blueprint $table) {
$table->dropColumn('カラム名');
});
}
}
カラムの追加
以下のコマンドでカラムが追加される。
php artisan migrate
さらに言えば、もう一回このコマンドを実行しても何もおきない。
元に戻す
カラム追加したけど消したいな、という場合は、
php artisan migrate:rollback --step=1
とやればいい。最後から1個前の(ようはさっき実施したカラムの追加)がもとに戻される。
いくつかいろんな変更をした後で、この追加したカラムを削除、みたいなのはあんまやめたほうがいい。上から順番にcreateとかしとるわけで、整合性チェックとかもあるし、ずいぶん経ってからこのadd columnを取り消したい、とかだったら、カラムをdropするマイグレーションを新規に追加したほうが無難。(たかが1行追加、とかだからなんでそんな面倒なことを、と思うかもしれんが、結構な変更をする場合もあるので)
まぁごちゃごちゃ追加削除すんなってこと。
以上!