【Laravel】マイグレーションでテーブル作成

こんにちは。今回はLaravelのマイグレーション機能を解説します。基礎的な内容になっているのでマイグレーションの初心者におすすめです。

マイグレーションとは

マイグレーションはデータベースの値を保持したままテーブルの作成、変更が出来るツールです。テーブルの作成、変更は全て履歴管理されているため、マイグレーションを実行することで最新のデータベース環境を作ることが出来ます。複数人で開発する際は、マイグレーションを各々が実行し、ローカルにデータベースの環境を作ることが出来ます。

今回やること

マイグレーションの基本、テーブル作成をやってみたいと思います。データベースはSqliteを使いますので、予め接続設定をしておきましょう。当ブログの記事Laravelでsqliteデータベースに接続するの手順で接続できます。

マイグレーションの作成と実行

artisanコマンドでmigrationクラスを作成します。–createオプションをつけることでテーブル名を指定することができます。今回はブログの投稿テーブル(posts)を作りますので–create=postsを指定します。コマンドが成功するとdatabase/migrationsにタイムスタンプ付きのクラスが作成されます。

$ php artisan make:migration create_posts_table --create=posts

# 成功時のメッセージ
Created Migration: 2021_07_21_223833_create_posts_table

作成されたクラスにはupとdownメソッドが作られています。upメソッドにはテーブル作成用のコマンドの雛形が作られており、downにはテーブル削除コマンドが作られています。upメソッドのSchema::create内にテーブルの項目を定義します。idとtimestampsメソッドが元から定義されています。timestampsはcreated_at(作成タイムスタンプ)とupdated_at(更新タイムスタンプ)を作ります。今回titleとcontentを文字列型で新たに追加しました。

    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
			      $table->string('title');
			      $table->string('content');
            $table->timestamps();
        });
    }

マイグレーションを実行してみましょう。artisan migrateコマンドを実行します。

$ php artisan migrate

#成功時のメッセージ
Migrating: 2021_07_21_223833_create_posts_table
Migrated:  2021_07_21_223833_create_posts_table (37.40ms)

実際に作成されているかsqlite3コマンドラインツールで調べてみましょう。

$sqlite3 database/database.sqlite

.tablesでテーブル一覧を表示しpostsが作成されていることを確認します。.schema postsでテーブル定義を確認します。マイグレーションで指定した項目がCreate文に含まれていれば成功です。

sqlite> .tables
failed_jobs password_resets users
migrations posts

sqlite> .schema posts
CREATE TABLE IF NOT EXISTS "posts" ("id" integer not null primary key autoincrement, "title" varchar not null, "content" varchar not null, "created_at" datetime, "updated_at" datetime);

マイグレーションのロールバック

何か間違えた場合にマイグレーションをやり直したいときがあります。その時はartisan migrate:rollbackコマンドで直前のマイグレーションを取り消すことができます。

$ php artisan migrate:rollback

#成功時のメッセージ
Rolling back: 2021_07_21_223833_create_posts_table
Rolled back:  2021_07_21_223833_create_posts_table (50.10ms)

Laravel

Posted by kobainmac