1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel Migration 基礎

Last updated at Posted at 2020-01-14

はじめに

  • 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
1
0
0

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
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?