マイグレーション
マイグレーションは構造化され整理された方法で、データベースを変更する便利な方法です。SQL の断片を手動で編集することもできますが、他の開発者にもそれを実行するように知らせる責任が生じます。次のデプロイ時に、本番のマシンに対して実行する変更点を記録しておく必要もあります。
データベーステーブル migration が、どのマイグレーションが実行されているかを記録しますので、アプリケーションファイルを更新し、どのマイグレーションが実行されるかを解決するために Migrate::current() を呼び出すだけで済みます。現在のバージョンは、core/config/migration.php の中にありますので、他の設定ファイルと同様に app/config にコピーして変更します。
設定
キー | 型 | デフォルト | 説明 |
---|---|---|---|
folder | string |
|
マイグレーションファイルが置かれるフォルダ。 |
connection | string |
|
マイグレーションを書き込むためのデータベース接続の設定名。 |
table | string |
|
マイグレーションデータを格納するためのデータベーステーブル名。 |
Note: マイグレーションが実行された後、設定ファイルはバージョン情報が上書きされます。それらのバージョン番号は内部的に使われるため変更してはいけません。
マイグレーションの作成
app/migrations フォルダにファイルを作成します。プレフィックスは 001 から始まる増加する数字です。数字はスキップせずに、また同じ数字を使わないようにする必要があります。最初のファイルは、app/migrations/001_example.php のようになります。
namespace Fuel\Migrations;
class Example
{
function up()
{
\DBUtil::create_table('posts', array(
'id' => array('type' => 'int', 'constraint' => 5),
'title' => array('type' => 'varchar', 'constraint' => 100),
'body' => array('type' => 'text'),
), array('id'));
}
function down()
{
\DBUtil::drop_table('posts');
}
}
マイグレーションの実行
マイグレーションは、2 つの方法で実行できます:
oil コマンドは refine コマンドを使用して、マイグレーション タスク を呼び出します。
$ php oil refine migrate
$ php oil refine migrate:current
$ php oil refine migrate:up
$ php oil refine migrate:down
$ php oil refine migrate --version=10
マイグレーションはモジュールとパッケージもサポートします。oil コマンドで、すべてをマイグレートしたり、特定のモジュールやパッケージのみを指定することができます。 モジュールやパッケージを指定した場合に、アプリケーションのマイグレーションも含めたい場合は、 '--default' を指定します。
$ php oil refine migrate -all
$ php oil refine migrate --modules=module1,module2 --packages=package1
$ php oil refine migrate:up --packages=package1
$ php oil refine migrate:down --modules=module1,module2 --default
$ php oil refine migrate --version=10
Note: migrate:current タスクは、あたかも最新のマイグレーションが安定しているとは言えないアプリケーションのコピーをたった今受け取ったかのように、 fuel/[app|core]/config/migrate.php に記載されているバージョンにあなたのスキーマをマッチさせます。 マイグレーションのために oil を使うと、このマイグレーションの設定番号を修正しますので、多くの状況で current コマンドは必要ありません。
マイグレーションのスキップ
up() or down() メソッドで false を返すことで、マイグレーションプロセスを中断することができます。 これは、マイグレーションが外部に依存している、例えば、別のマイグレーションによって作成されたテーブルがある場合などに 便利です。
これは、現在処理されているマイグレーションスタック、アプリケーションマイグレーションまたは 1つのモジュールやパッケージのマイグレーションのみを中断します。 他のスタックのマイグレーションはすべて通常どおり処理されます。