【Laravel入門】データベース接続とマイグレーション
はじめに
Laravelの初歩的なところについて、
何回かに分けてメモを書いています。
【Laravel入門】 インストールから起動まで - 人生の恥は書き捨て
【Laravel入門】ルーティング - 人生の恥は書き捨て
【Laravel入門】Bladeテンプレート - 人生の恥は書き捨て
マイグレーションとは
マイグレーション(migration)はデータベース構成のバージョン管理ツールのようなものです。
マイグレーションを使うことで、
- マイグレーションスクリプトを書いておけば、全く同じ構成のデータベースを作ることができる。
- 設定を追加するときには、スクリプトを書き足してmigrateすれば簡単に設定を追加。
- rollbackで新しい設定の追加前にもどせる。
- 一つのスクリプトでmysqlだけでなくsqliteや他のDBの設定も可能。
といったことができます。
今回はユーザーテーブルを作ってみることにします。
database接続の設定
app/config/database.phpに接続の設定が書いてあります。
connectionsの部分のdatabase名やuser名、passwordなどを適切に設定してください。
マイグレーションファイルの作成
artisanコマンドが使える場所で、
php artisan migrate:make CreateUserTable
を実行します。CreateUserTableの部分はお好きな様に。
すると2014_08_03_132022_CreateUserTable.phpというような、
作成日時+指定した名前.phpのファイルが
app/database/migration/以下に作成されます。
このファイルにデータベースの設定内容を書いていきます。
ファイルを開くと
<?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateUserTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { // } /** * Reverse the migrations. * * @return void */ public function down() { // } }
こんな感じになっていると思います。
upの部分には新しく追加したい操作を、
downのところにはrollbackする時の操作を書いていきます。
テーブル作成の操作を書くとこんな感じ。
<?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateUserTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('users', function($table) { $table->increments('id'); $table->string('username', 20); $table->string('password', 64); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('users'); } }
upにはusersテーブルを作るように、downにはテーブルを消すように書いてあります。
書き終わったら。migrationを実行します。
php artisan migrate
実行するか確認されるのでEnterしましょう。
するとデータベース内にusersテーブルが作成されます。
mysql> desc users; +------------+------------------+------+-----+---------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+------------------+------+-----+---------------------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | username | varchar(20) | NO | | NULL | | | password | varchar(64) | NO | | NULL | | | created_at | timestamp | NO | | 0000-00-00 00:00:00 | | | updated_at | timestamp | NO | | 0000-00-00 00:00:00 | | +------------+------------------+------+-----+---------------------+----------------+
ここで、認証用のremember_tokenカラムを追加したいと思います。
tableの作成と同様に、
php artisan migrate:make ModifyUserTable
として、設定追加用のファイルを作ります。
<?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class ModifyUserTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('users', function($table) { $table->string('remember_token', 100); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('users', function($table) { $table->dropColumn('remember_token'); }); } }
そして
php artisan migrate
すると
mysql> desc users; +----------------+------------------+------+-----+---------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------------+------------------+------+-----+---------------------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | username | varchar(20) | NO | | NULL | | | password | varchar(64) | NO | | NULL | | | created_at | timestamp | NO | | 0000-00-00 00:00:00 | | | updated_at | timestamp | NO | | 0000-00-00 00:00:00 | | | remember_token | varchar(100) | NO | | NULL | | +----------------+------------------+------+-----+---------------------+----------------+ 6 rows in set (0.00 sec)
という風にカラムが追加できます。
更に、
php artisan migrate:rollback
とするとremember_tokenカラムを追加する前に戻すことができます。
rollbackする際に class not foundのエラーが出ることがあります(僕は出ました)。
この際は composer dump-autoload として、ファイルを読み込み直すと正しく実行できます。