LoginSignup
0

More than 3 years have passed since last update.

posted at

updated at

Laravel Migration 基礎

はじめに

  • 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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0