0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FuelPHP の migrate Task

Last updated at Posted at 2024-04-23

概要

FuelPHP では Database の Migration は migrate Task を用いて行う
migrate Task にはいくつかのコマンドとオプションが用意されている

また FuelPHP の Migration File は fuel/app/migrations/nnn_xxx.php のフォーマットとなっており
nnn にはバージョン番号、xxx には Class 名が入る
基本的には nnnxxx も同じ値は利用してはならない

もし被ってしまった場合
nnnphp oil refine migrate:currentphp oil refine migrate --catchup を利用することで同じバージョンでも実行可能
xxxphp oil refine migrate:upphp 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:currentphp 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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?