イントロダクション
マイグレーションはデータベースのバージョンコントロールの一種です。これはデータベーススキーマの修正と現状のスキーマの状態を最新状態に保つことを両立させてくれます。典型的なマイグレーションはアプリケーションのスキーマを簡単に管理するためのスキーマ・ビルダーと一緒に使用されます。
マイグレーションの生成
マイグレーションを作成するには、Artisanコマンドラインツールでmigrate:make
コマンドを実行します。
php artisan migrate:make create_users_table
マイグレーションはapp/database/migrations
フォルダーに設置され、マイグレーションの順番をフレームワークに知らせるため、名前にタイムスタンプが含まれています。
さらにマイグレーションを作成時に--path
オプションを指定できます。インストールしたルートディレクトリーからの相対パスを指定します。
php artisan migrate:make foo --path=app/migrations
--table
と--create
オプションもテーブル名、マイグレーションで新しいテーブルを生成するかを指定するために使用できます。
php artisan migrate:make add_votes_to_user_table --table=users
php artisan migrate:make create_users_table --create=users
マイグレーションの実行
未実行の全マイグレーションを実行する
php artisan migrate
指定されたパスの全未実行マイグレーションを実行する
php artisan migrate --path=app/foo/migrations
パッケージの全未実行マイグレーションを実行する
php artisan migrate --package=vendor/package
注目:"class not found"エラーがマイグレーション実行時に発生する場合は、
composer dump-autoload
コマンドを実行してみてください。
実働環境でマイグレーションを強制する
いくつかのマイグレーション操作は破壊的です。つまり、データーを失う可能性があります。実働環境のデータベースでこうしたコマンドを実行してしまうことを守るために、コマンドが実行される前に、確認のプロンプトが表示されます。このようにコマンド実行時のプロンプトを出さないためには、--force
フラグを指定してください。
php artisan migrate --force
マイグレーションのロールバック
最後のマイグレーション操作をロールバックする
php artisan migrate:rollback
全マイグレーションをロールバックする
php artisan migrate:reset
全マイグレーションをロールバックし、再度全部実行する
php artisan migrate:refresh
php artisan migrate:refresh --seed
データベース初期値設定
更に初期値設定(seed)クラスを使用し、テストデーターをデーターベースに設定する、シンプルな方法もLaravelには備わっています。全部の初期値設定クラスはapp/database/seeds
に保存されます。初期値設定クラスには好きな名前を付けられます。ですがUserTableSeeder
などのような分かりやすい規則に従ったほうが良いでしょう。デフォルトとして、DatabaseSeeder
クラスが定義されています。このクラスから、call
メソッドを使い他の初期値設定クラスを呼び出すことで、値を設定する順番をコントロールできます。
データベース初期値設定の例
class DatabaseSeeder extends Seeder {
public function run()
{
$this->call('UserTableSeeder');
$this->command->info('User table seeded!');
}
}
class UserTableSeeder extends Seeder {
public function run()
{
DB::table('users')->delete();
User::create(array('email' => 'foo@bar.com'));
}
}
データベースに初期データーを設置するには、Artisanコマンドラインツールでdb:seed
コマンドを使ってください。
php artisan db:seed
デフォルトでは、db:seed
コマンドは、他の初期値設定クラスを呼び出しているDatabaseSeeder
クラスを実行します。個別に初期値設定クラスを呼び出したい場合は、--class
オプションを指定して実行することができます。
php artisan db:seed --class=UserTableSeeder
またmigrate:refresh
コマンドを使用し、マイグレーションを全部ロールバックし、再度実行することでも、初期データーを設置できます。
php artisan migrate:refresh --seed