はじめに
- Laravel Migration の基礎的な使い方のメモ
環境
Laravel
$ php artisan --version
Laravel Framework 5.8.16
Mysql
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.28 |
+-----------+
1 row in set (0.00 sec)
テーブルを追加して、Laravelで使う
① Table の作成
- コマンドを実行し、 Created Migartion が返答で帰ってくれば、作成できている。
$ php artisan make:migration create_tests_table
> Created Migration: yyyy_MM_dd_HHmms_create_tests_table
- 作成したファイルは、
プロジェクト/database/migrations/
の直下に作成したファイルができている。 - 上記のサンプルだと、『yyyy_MM_dd_HHmms_create_tests_table.php』というファイルができている。
② Migration ファイルの編集
- ファイルができているので、追加したいカラムなどを設定していく
- varchar(128)の name カラムを追加
- unsigned int の number を追加
yyyy_MM_ddHHmmss_create_tests_table.php
class CreateTestsTable extends Migration
{
public function up()
{
Schema::create('tests', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name', 128)->nullable()
->comment('名前'); // varchar 文字長 128
$table->integer('number')->nedned()
->comment('番号'); // int 符号なし
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('tests');
}
}
③ Migration ファイルの実行
- 実行すると、データベースに作成したテーブルができる
$ php artisan migrate
> Migrating: YYYY_MM_DD_ddHHmmss_tests_table
> Migrated: YYYY_MM_DD_ddHHmmss_tests_table
- テーブルができているか、Mysql 側で確認してみる
mysql> DESCRIBE tests;
+------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(128) | YES | | NULL | |
| number | int(10) unsigned | NO | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+------------+---------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
④ Model を作成し、Laravelで使う
- コマンドラインから Model の作成を行う
- DB のテーブルを作成するときは複数形だったけど、クラスは単数に変更して作成する
$ php artisan make:model Models/Test
>Model created successfully.
- 正常に実行できると
プロジェクト/app/Models/
の下にTest.php
が作成される
ロールバック
実行した migration ファイルをロールバックできる
- 現状の migrations の実行状態に対して、
batch
1まで戻りたい。
mysql> select * from migrations;
+----+-----------------------------------------------------+-------+
| id | migration | batch |
+----+-----------------------------------------------------+-------+
| 1 | YYYY_MM_DD_HHIISS_create_test_logs | 1 |
| 2 | YYYY_MM_DD_HHIISS_create_sync_logs | 1 |
| 3 | YYYY_MM_DD_HHIISS_create_tests_table | 2 |
| 4 | YYYY_MM_DD_HHIISS_add_column_check_type | 3 |
+----+-----------------------------------------------------+-------+
- 1 まで戻るには、2つ戻る必要がある。
- なので
migration:rollback
コマンドの後ろに 引数を付けて2つ戻る - 引数なしで実行すると、一つ前のみしか戻らない
$ php artisan migrate:rollback --step=2
> Rolling back: YYYY_MM_DD_HHIISS_add_column_check_type
> Rolled back: YYYY_MM_DD_HHIISS_add_column_check_type
> Rolling back: YYYY_MM_DD_HHIISS_create_tests_table
> Rolled back: YYYY_MM_DD_HHIISS_create_tests_table
- 正常に戻ったか確認する
mysql> select * from migrations;
+----+-----------------------------------------------------+-------+
| id | migration | batch |
+----+-----------------------------------------------------+-------+
| 1 | YYYY_MM_DD_HHIISS_create_test_logs | 1 |
| 2 | YYYY_MM_DD_HHIISS_create_sync_logs | 1 |
+----+-----------------------------------------------------+-------+
- 本当に消えたか念のため、テーブルある確認。なければおっけ〜
mysql> DESCRIBE tests;
ERROR 1146 (42S02): Table 'tests' doesn't exist