Laravel5.5LTS、AtoZ#4、データベースとマイグレーション
タグ: Laravel5.5
Laravelを一通り経験しようシリーズ4段目です。今回は、データベースを準備し、データベースとテーブルの構造を管理するマイグレーションを試してみましょう。
DBの準備
認証で作成されるユーザー情報は、データベースへ保存されます。今回はデフォルト設定に従いMySQLを使用します。もちろん、Homestead環境では準備済みです。
プロジェクトルートの.envファイルの中身を確認しましょう。データベースの接続設定があります。
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret
Laravelでは、環境設定などはconfig
ディレクトリ下の設定ファイルで定義するお約束になっています。そうしたファイルに用意されている設定項目のうち、開発環境とデプロイ後の実働環境で変更になりやすい項目については、.envファイル内から設定内容を読み込むようになっています。
実際には、直接.envファイルをアクセスしているわけでありません。.envで定義された内容はシェルの環境変数として設定されます。その環境変数をLaravel起動時に読み込みます。これにより、たとえばWebサーバーの設定や、Webサーバーの死活管理を行うプログラムでも、値を指定できるようになっています。それにより、よりセキュアにアプリを運営できるようになっています。(Homestead環境ではWebサーバーの死活管理は行われていません。)
Homestead環境では、MySQLのルートユーザーはhomestead
で、パスワードはsecret
です。それが既に設定済みです。homestead
データベースもデフォルトで用意されています。Homesteadでホストするサイトが1つだけの場合は、これを利用しても良いでしょう。通常は、サイトに合わせてわかりやすい名前をデータベースに付けます。
今回は、新たにinstall
データベースを作成し、それを利用します。そのため、DB_DATABASE
項目を変更します。
DB_DATABASE=install
install
データベースはMySQLデータベースエンジンに、まだ用意されていません。自分で作成する必要があります。
もし、PHPMyAdminをインストール済みであれば、それを利用して作成してください。もしくは、MySQLコマンド(SQL)を直接実行し、テーブルを作成します。
mysql -u homestead -psecret -e 'CREATE DATABASE install DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci'
install
データベースをデフォルトのキャラクターをutf8mb4
で、コレーションをutf8mb4_general_ci
で作成します。install
部分がテーブルの名前です。他のテーブル名を使用する場合は、変更してください。
マイグレーション
マイグレーションは、データベースの構造(スキーマ)を管理する仕組みです。ベータベースに対し、テーブルを作成/削除したり、構造を追加/削除したりする定義と、逆にその変更を取り消す定義を行い、それに従ってテーブルを変更します。
現在のLaravelのマイグレーション定義は、PHPのクラスの中に記述しています。
構造変更を取り消せると言うメリットの他に、主に2つの利便性があります。一つはチーム開発で変更を他のメンバーと共有できること、もう一つはPHPクラスで定義すると言うことはテキストファイルですので、簡単にソースコントロール下に置けます。
マイグレーションクラスは、database/migrations
ディレクトリ下に設置されています。ファイル名には日時が先頭につけてあります。マイグレーションを正しく行うには、定義した順番に実行する必要があるためです。
ファイルを開き、クラスの中を見てみると、構造を変化させるup
関数と、その変化を取り消すdown
関数の2つが定義されています。
インストール時には、users
テーブル作成とpassword_resets
テーブル作成の2つのマイグレーションが用意されています。
試しに実行してみましょう。
php artisan migrate
これにより、未実行のマイグレーションがまとめて一気に実行されます。テーブルができているかPHPMyAdminで確認するか、もしくは以下のコマンドを実行してみましょう。
mysql -u homestead -psecret -e 'SHOW TABLES FROM install'
install
データベース中のテーブルが全部表示されます。実行結果を確認しましょう。
Tables_in_install |
---|
migrations |
password_resets |
users |
users
とpassword_resets
テーブルができています。migrations
テーブルは、Laravelがどのマイグレーションを実行しているのかなど、管理に使用するテーブルです。マイグレーションを実行すると、Laravelが自動的に作成します。
mysql -u homestead -psecret -e 'SHOW COLUMNS FROM migrations IN install'
実行結果
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | int(10) unsigned | NO | PRI | NULL | auto_increment |
migration | varchar(255) | NO | NULL | ||
batch | int(11) | NO | NULL |
肝心のusers
とpassword_resets
テーブルの構造も、確認しておきましょう。
mysql -u homestead -psecret -e 'SHOW COLUMNS FROM users IN install'
実行結果
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | int(10) unsigned | NO | PRI | NULL | auto_increment |
name | varchar(255) | NO | NULL | ||
varchar(255) | NO | UNI | NULL | ||
password | varchar(255) | NO | NULL | ||
remember_token | varchar(100) | YES | NULL | ||
created_at | timestamp | YES | NULL | ||
updated_at | timestamp | YES | NULL |
mysql -u homestead -psecret -e 'SHOW COLUMNS FROM password_resets IN install'
実行結果
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
varchar(255) | NO | MUL | NULL | ||
token | varchar(255) | NO | NULL | ||
created_at | timestamp | YES | NULL |
テーブルの実際の構造と、マイグレーションクラス中のup関数の定義を見比べてください。すぐにどのように定義すればよいか、勘がつかめるでしょう。うっすらとでも、使い方がわかったら、後はドキュメントを読んで理解できます。