Laravelのmigrationを用いてMySQLのテーブルを作成します。
migrationは、Laravelが対応する全てのデータベースにおけるテーブルの作成・テーブル定義の更新をサポートする機能です。
migrationを利用すれば、SQLの書き方を知らなくても対応するデータベースであれば操作が可能になるということです。
migrationの内容を都度削除せず残しておけばテーブルのバージョン管理の用途にも使えます。
この記事ではMySQLのテーブルの作成をやってみます。
OS・プログラムのバージョンは下記の通りです。
| OS | CentOS7 |
| PHP | 7.3.33 |
| Laravel | 8.83.27 |
| MySQL | 14.14 |
migrationファイルを作成する
最初にプログラムを記載するmigrationファイルを用意します。
Laravelプロジェクトを作成した階層に移動します。
cd /var/www/html/test
下記のコマンドを実行します。
testテーブルを作成するとした場合下記のコマンドを実行します。
php artisan make:migration creare_test_table --create=test
下記のパスにmigrationファイルが作成されます。
/var/www/html/test/database/migrations
インストール時の設定のままであればファイル名は下記のようになるはずです。
2024_02_20_091236_create_test_table.php
ついでながらphp artisanとはLaravelのコマンドラインインターフェースで、こちらを使うことてデータベースのmigration以外にも様々なことができます。
migrationファイルにプログラムを記載する
作成できたmigrationファイルにプログラムを記載します。
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateTestTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('test', function (Blueprint $table) {
$table->string('test_id',3);
$table->string('test_name',50);
$table->timestamp('create_date')->useCurrent();
$table->timestamp('update_date')->useCurrent()->useCurrentOnUpdate();
$table->primary('test_id');
$table->unique('test_id');
$table->unique('test_name');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('test');
}
}
作成されたファイルのupファンクション内に元々記載されていた箇所を除くとこうなります。
Schema::create('test', function (Blueprint $table) {
$table->string('test_id',3);
$table->string('test_name',50);
$table->timestamp('create_date')->useCurrent();
$table->timestamp('update_date')->useCurrent()->useCurrentOnUpdate();
$table->primary('test_id');
$table->unique('test_id');
$table->unique('test_name');
});
}
Schemaクラスはデータベースの操作を提供し、createメソッドでテーブルを作成できます。
第1引数はテーブル名で、第2引数は無名関数でテーブル定義をします。
無名関数の引数としてテーブル定義ができるBlueprintオブジェクトの変数を用います。
第2引数のfunctionの中のテーブル定義の記載を見ていきます。
基本的にBlueprintオブジェクトの変数に->で連結して定義していきます。
string(‘test_id’,3)というのは3桁の文字列のtest_idというカラムを定義しています。
useCurrent()でレコードが生成されたタイミングの時刻がcreate_dateカラムに入るようにします。
useCurrentOnUpdate()で更新されたタイミングの時刻がupdate_dateに入るようにしています。
primary(‘test_id’)はtest_idカラムを主キーにするという意味で、unique(‘test_id’)はtest_idの値が必ず一意になるよう制約をつけます。
他にもたくさんの書き方があるので公式のドキュメントを見て利用するようにしましょう。
migrationファイルを実行する
下記のコマンドを実行します。
php artisan migrate
実行が完了したらtestテーブルが作成されているはずです。
ついでながら、一度実行完了したmigrationファイルは次回の処理では実行されなくなります。
下記のコマンドでmigrationファイルの実行状況は確認できます。
php artisan migrate:status
migrationをロールバックする
下記コマンドで最後に実行したmigrationファイルをロールバックできます。
php artisan migrate:rollback
stepオプションでは最後から指定の数だけロールバックできます。
php artisan migrate:rollback --step=2
上記であれば2つロールバックできます。
migrationでバージョン管理を楽にする
migrationはデータベースのバージョン管理のような意味合いを持つのでチーム開発しているときは便利です。
普通にSQLを書けば基本的にコードは書いた人しか持っていませんが、migrationを使えばmigrationファイルが環境に残せます。
有効に使って開発を進めましょう。

