最近laravelを触る機会があったので、そこで学んだことを
メモしていきます。
今回はマイグレーション手順です。
こちらの記事は4.系のコマンドになります。
マイグレーションのファイル作成
php artisan migrate:make
コマンドでマイグレーションファイルが
app/database/migrations
に作成されます。
例えば
php artisan migrate:make create_users_table
の様にすると
Created Migration: 2016_01_04_103448_create_users_table
Generating optimized class loader
というメッセージが出力され
2016_01_04_103448_create_users_table
が先ほどのフォルダに作成されているかと思います。
テーブルの作成
作成されたマイグレーションファイルを見てみると
class CreateUsersTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
//
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}
の様になっているかと思います。
up()にマイグレーションを実行した際の処理を
down()にup()の処理を取り消す処理を実装します。
テーブルを作成するソースはこんな感じになります。
class CreateUsersTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::connection('user_data')->create('users', function($table){
$table->increments('id');
$table->string('name', 32)->default("");
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::connection('user_data')->drop('users');
}
}
簡単に解説すると、
Schema::connection('user_data')->create('users', function($table)
で、user_dataデータベースにusersというテーブルを作成しています。
$table->increments('id');
ではidというオートインクリメントされるカラムを作成しています。
$table->string('name', 32)->default("");
ではnameというstring型のカラムを作成しています。
32というのはstringのサイズで
default("")部分はデフォルトではカラムに空文字を入れる様に
指定しています。
$table->timestamps();
は、created_atとupdated_atというtimestamp型のカラムを作成します。
updated_atは更新された時間を
created_atは作成された時間を保持します。
down()内の
Schema::connection('user_data')->drop('users');
ではup()で作成したusersテーブルを削除しています
テーブルの更新
マイグレーションではテーブルの作成だけでなく更新をするときもあるかと思います。
更新方法も簡単にまとめます。
基本的には作成と同じで
php artisan migrate:make add_column_age_to_users_table
で作成し、up()とdown()に処理を実装していきます。
今回はサンプルとして以下の様のコードを書きました。
public function up()
{
Schema::connection('user_data')->table('users', function($table){
$table->integer('age')->after('name')->default(0);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::connection('user_data')->table('users', function($table){
$table->dropColumns('age');
});
}
こちらも簡単に解説すると、
Schema::connection('user_data')->table('users', function($table)
で更新するテーブルを指定しています。
createと違い作成はしません。
$table->integer('age')->after('name')->default(0);
でageというint型のカラムを追加しています。
after('name')はnameというカラムの後ろに追加するという指定になります。
down()の
$table->dropColumns('age');
ではup()で追加したageというカラムを削除しています。
マイグレーションの実行とロールバック
といっても実行は簡単で、
php artisan migrate
で実行できます。
またロールバックも
php artisan migrate:rollback
でできます。とても容易ですね。
今回は以上です。
サーバーサイドの方からすると当たり前のことなのかもしれませんが、
普段クライアントサイドメインの自分にとっては
色々と新鮮で面白いです。