概要
FuelPHP では Database の Migration は migrate
Task を用いて行う
migrate
Task にはいくつかのコマンドとオプションが用意されている
また FuelPHP の Migration File は fuel/app/migrations/nnn_xxx.php
のフォーマットとなっており
nnn
にはバージョン番号、xxx
には Class 名が入る
基本的には nnn
も xxx
も同じ値は利用してはならない
もし被ってしまった場合
nnn
は php oil refine migrate:current
や php oil refine migrate --catchup
を利用することで同じバージョンでも実行可能
xxx
は php oil refine migrate:up
や php oil refine migratre:down
で1件ずつ処理するなどして、同じ Class を読み込まないようにすることで実行可能
またバージョン (nnn
) は3桁である必要はない (16桁までは利用できることを確認済み)
基本コマンド
ヘルプ一覧を表示
$ php oil refine migrate:help
現在のバージョン以降を Migrate
$ php oil refine migrate:run
もしくは
$ php oil refine migrate
現在のバージョン以下で Migration できていないものを Migrate
$ php oil refine migrate:current
現在のバージョンから一つだけ Migrate
$ php oil refine migrate:up
現在のバージョンを Rollback
$ php oil refine migrate:down
オプション
-v
, --version
バージョンを指定
使い方は -v=<version>
もしくは --version=<version>
で <version>
で指定した番号のバージョンとなる
e.g.
バージョンが 1, 2, 3, 4, 5 と Migration File がある場合に
php oil refine migrate:up -v=4
を実行すると 1, 2, 3, 4 が Migrate される
この状態で php oil refine migrate:down -v=2
を実行すると 4, 3 が Rollback される
--catchup
を指定
過去バージョンも含めて Migration
使い方は php oil refine migrate --catchup
もしくは php oil refine migrate:run --catchup
とすることで、過去のバージョンを含めて Migrate される
つまり php oil refine migrate:current
と php oil refine migrate
を同時に実行するようなもの
e.g.
バージョンが 1, 2, 3, 4 ,5 と Migration File があり、現在 1, 3, 4 が Migration されている場合に
php oil refine migrate --catchup
を実行すると 2, 5 が Migrate される
--installed
インストール済みモジュール・パッケージを指定する
--modules=<インストール済みモジュール> --packages=<インストール済みパッケージ> --default
のエイリアス
NOTE:
--all
を指定した場合 --all
が優先される
--all
全てのモジュール・パッケージを指定する
--modules --packages --default
のエイリアス
--default
明示的に default
を指定する
default
はモジュールやパッケージを指定しなかった場合は有効となるが、モジュールやパッケージを指定した場合は無効となる
モジュールやパッケージを指定した場合でも有効としたい場合に利用する
つまり m
, --modules
, -p
, --packages
を指定すると default
は無効となる
-m
, --modules
モジュールを指定する
値を指定しなかった場合は全てのモジュールを対象とする
値を指定する場合は、対象となるモジュールを ,
で連結する
e.g.
php oil refine migrate -m
は全てのモジュールが対象となる
php oil refine migrate -m=sample,example
は sample と example モジュールが対象となる
NOTE:
このオプションを指定すると default
は無効となる
-p
, --packages
パッケージを指定する
値を指定しなかった場合は全てのパッケージを対象とする
値を指定する場合は、対象となるパッケージを ,
で連結する
e.g.
php oil refine migrate -p
は全てのパッケージが対象となる
php oil refine migrate -p=sample,example
は sample と example パッケージが対象となる
Tips
Database を初期化したい場合
Database を作り直した等のまっさらな状態で php oil r migrate
を実行しても再生成されない
それは fuel/app/config/<environment>/migrations.php
によって管理されているため Database の migrations Table がまっさらな状態でも Migration できない
そのため fuel/app/config/<environment>/migrations.php
を削除するなどの対応が必要となる
特定のファイルのみ Rollback したい場合
FuelPHP ではそういった昨日は提供されていないため対象のファイルを一時的に退避させる必要がある
e.g. バージョンが 1, 2, 3, 4 ,5 と Migration File があり、3 を Rollback したい場合
※ ただし 4, 5 が 3 の Rollback に依存していない場合い限る
$ mkdir /tmp/migrations
$ mv fuel/app/migrations/{4_*,5_*} /tmp/migrations
$ php oil refine migrate:down
$ mv /tmp/migrations/* fuel/app/migrations/
$ rmdir /tmp/migrations
その後 3 を Migration したい場合は current
コマンドを実行する必要がある
※ この方法を用いた場合、現在のバージョンは 5 の扱いとなっている
$ php oil refine migrate:current