[PHP] Laravelのマイグレーションで、テーブルを新規作成する
こんにちは、@yoheiMuneです。
マイグレーション機能があるとデータベースの管理が簡単にできて便利です。Laravelのマイグレーション機能を用いて、DBテーブルの新規作成する方法をブログに書きたいと思います。
マイグレーション機能が便利な点として、Create文などのSQLそのものを書く必要がないこと、複数のデータベースに同じ記述で対応できること、ロールバックもコマンド1つでできること、PHPUnitテストなどでもそれが利用できること、途中から参加した開発者のデータベース設定がすぐに終わること、など色々とメリットがあります。マイグレーションを開発/運用で利用すると便利なことが多いです。
Laravelにもマイグレーション機能が用意されていて、様々な機能が提供されています。今日はその中で、テーブルの作成についてブログを書きたいと思います。
また、データベースも事前に作成しておく必要があります。以下のコマンドで作成します。
また、
Database: Migrations - Laravel(英語、公式)
データベース:マイグレーション 5.5 Laravel(日本語)
最後になりますが本ブログでは、PHP、サーバー、フロントエンド、Swift、Node.js、Python、Java、Linux、インフラ、Go言語、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!
マイグレーション機能があるとデータベースの管理が簡単にできて便利です。Laravelのマイグレーション機能を用いて、DBテーブルの新規作成する方法をブログに書きたいと思います。
目次
対象バージョン
Laravelの5.6を対象としていますが、5系なら同じと思います。違う部分は適宜読み替えを御願いします。マイグレーション機能とは
テーブル作成やカラム追加などのデータベースへの変更を管理する機能です。Laravelの場合には、変更内容を記載したマイグレーションファイルを作成し(変更ごとに1つずつ作成する)、それをArtisanコマンドで実行します。マイグレーション機能が便利な点として、Create文などのSQLそのものを書く必要がないこと、複数のデータベースに同じ記述で対応できること、ロールバックもコマンド1つでできること、PHPUnitテストなどでもそれが利用できること、途中から参加した開発者のデータベース設定がすぐに終わること、など色々とメリットがあります。マイグレーションを開発/運用で利用すると便利なことが多いです。
Laravelにもマイグレーション機能が用意されていて、様々な機能が提供されています。今日はその中で、テーブルの作成についてブログを書きたいと思います。
テーブル作成のマイグレーションを行う
マイグレーションは3つのステップで実現できます。マイグレーションファイルの作成、マイグレーションファイルへの記載、マイグレーションの実行、です。マイグレーションファイルの作成する
artisanコマンドで、マイグレーションファイルを新規作成します。# Ownersテーブルを新規作成するための、マイグレーションファイルを作るコマンド. php artisan make:migration create_owners_table
create_xxx_table
のxxx
にテーブル名を記載することで、そのテーブルを作成する為のマイグレーションファイルが作成されます。作成されたファイルは、以下に保存されます。# マイグレーションのファイルパス # ファイル名にはそれを作成した日時が含まれる. database/migrations/2018_05_17_101656_create_owners_table.php作成直後は以下のような記述となっています。
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateOwnersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() // マイグレーション実行時に呼び出される関数. { Schema::create('owners', function (Blueprint $table) { $table->increments('id'); // 主キー $table->timestamps(); // created_at と updated_at カラムの作成. }); } /** * Reverse the migrations. * * @return void */ public function down() // ロールバック時に呼び出される関数. { Schema::dropIfExists('owners'); } }
up()
とdown()
の2つのメソッドがあります。マイグレーション実行時にはup()
が呼び出され、その中でSchema::create
を実行することでテーブルを新規に作成します。マイグレーションファイルを編集する
上記で作成したマイグレーションファイルを編集して、up()
関数のコールバックの中に、追加したいカラムを追記します。public function up() { Schema::create('owners', function (Blueprint $table) { $table->increments('id'); $table->string("login_id", 64)->unique(); $table->string("password"); $table->string("access_token")->nullable(); $table->timestamp("access_token_expired_at"); $table->timestamps(); }); }
$table->string()
は文字列のカラムを定義し、$table->integer()
は数値型のカラムを定義します。指定できるデータ型は多数あり、マイグレーションの「使用できるカラムタイプ」にて確認できます。nullable()
はカラム修飾子と呼ばれるもので、カラムに制限を追加します。ここではNULL可のカラムを定義しています。カラム修飾子の一覧はマイグレーションの「カラム修飾子」を参照ください。unique()
はユニークキーを定義しています。ユニークキーを含むインデックスの作成は、マイグレーションの「インデックス作成」を参照ください。マイグレーションを実行する
作成したマイグレーションファイルを実行するには、以下のArtisanコマンドを利用します。$ php artisan migrateこれでマイグレーションをデータベースに適用しました。なお事前にデータベースの接続設定が必要です。まだの場合には、[PHP] Macで、Laravel5.6の、起動、MySQL接続設定まで行うをご確認ください。
また、データベースも事前に作成しておく必要があります。以下のコマンドで作成します。
# MySQLの場合(データベース名は myapp ) CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;絵文字を格納できる
utf8mb4
という文字コードを、Laravelはデフォルトでは利用します。データベースも同じ文字コードで作成します。マイグレーション結果を確認する
データベースに接続して、マイグレーションが行われたことを確認します。# mysqlのコマンド # テーブル一覧を確認 mysql> show tables; +---------------+ | Tables_in_sss | +---------------+ | migrations | | owners | +---------------+ # テーブル定義の確認. mysql> desc owners; +-------------------------+------------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +-------------------------+------------------+------+-----+-------------------+-----------------------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | login_id | varchar(64) | NO | UNI | NULL | | | password | varchar(255) | NO | | NULL | | | access_token | varchar(255) | NO | | NULL | | | access_token_expired_at | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | created_at | timestamp | YES | | NULL | | | updated_at | timestamp | YES | | NULL | | +-------------------------+------------------+------+-----+-------------------+-----------------------------+ 8 rows in set (0.01 sec)
owners
テーブルが作成されていることがわかります。また、
migrations
テーブルも作成されます。中身には、マイグレーションの実行履歴が保存されます。mysql> select * from migrations; +----+---------------------------------------+-------+ | id | migration | batch | +----+---------------------------------------+-------+ | 1 | 2018_05_17_101656_create_owners_table | 1 | +----+---------------------------------------+-------+ 1 row in set (0.00 sec)
マイグレーションをロールバックする
作成したものを戻す場合には、以下のコマンドを実行します(以下のいずれかの方法を選択します)。# 最後に「一度に」実行したマイグレーションをまとめて元に戻す. $ php artisan migrate:rollback # 巻き戻す数を指定する. php artisan migrate:rollback --step=5 # 全部のマイグレーションを戻す. php artisan migrate:reset
参考資料
以下の資料を参照しました、ありがとうございます。Database: Migrations - Laravel(英語、公式)
データベース:マイグレーション 5.5 Laravel(日本語)
最後に
マイグレーションは便利なのですが、実際にファイルを編集しようとした時には、利用可能なデータ型や制約を確認する必要があり、それへのリンクも残しておきたいと思ってブログに書きました。今後もLaravel力をアップできたらと思います。最後になりますが本ブログでは、PHP、サーバー、フロントエンド、Swift、Node.js、Python、Java、Linux、インフラ、Go言語、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!