cakephp3にはPhinxのmigrationsがデフォルトで入ってます。
cakephp2の頃と比べると性質が異なるので使用できるコマンドまとめ備忘録。
コマンド一覧
php bin/cake.php migrations
の場合
-
php bin/cake.php migrations create HogeHoge
「hogehoge」という名前のmigrationファイルの雛形を作成してくれます。 こんなの。引数はキャメルじゃないと怒られるよ!
<?php
use Phinx\Migration\AbstractMigration;
class HogeHoge extends AbstractMigration
{
/**
* Change Method.
*
* Write your reversible migrations using this method.
*
* More information on writing migrations is available here:
* http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
*/
public function change()
{
}
}
-
php bin/cake.php migrations migrate
マイグレーションをDBに適用します。 何も指定しなければ最新状態まで。migrate -t [Migration ID]
で指定した段階まで適用します。 -
php bin/cake.php migrations rollback
マイグレーションを逆戻りします。 基本は一段階ずつ下がっていきます。 こちらもrollback -t [Migration ID]
で指定した段階まで適用します。 -
php bin/cake.php migrations status
現在のマイグレーションとDBのステータスを表示してくれます。 こんな感じ、分かりやすいですね。
Status Migration ID Migration Name
-----------------------------------------
up 20151102022648 Initial
up 20151102083415 AddPriceToDomains
up 20151102085014 AddConfigToDomains
down 20151102092745 HogeHoge
-
php bin/cake.php migrations mark_migrated
これが面白い。mark_migrated [Migration ID]
で指定したマイグレーションを適用したことにします。 Cake側では適用したつもりですが、DBには実際には反映されていない状況になります。 たとえば、こんな状況で。
Status Migration ID Migration Name
-----------------------------------------
down 20151102022648 Initial
down 20151102083415 AddPriceToDomains
down 20151102085014 AddConfigToDomains
down 20151102092745 HogeHoge
php bin/cake.php migrations mark_migrated 20151102085014
で
こうなります。
Status Migration ID Migration Name
-----------------------------------------
down 20151102022648 Initial
down 20151102083415 AddPriceToDomains
up 20151102085014 AddConfigToDomains
down 20151102092745 HogeHoge
DBを先にいじって後からMigrationを書いたときとかに使えそう。
php bin/cake.php bake
の場合
bakeコマンドにも2つほどマイグレーションに関係するコマンドがあります。
-
php bin/cake.php bake migrate
基本は前述のcreate
と一緒。ただ引数はキャメルじゃなくでも大丈夫 それと例えば、php bin/cake.php migrations create AddConfigToDomains price:decimal
と打つと 以下のようなところまでひな形を作ってくれます。(複数には対応してないご様子。
<?php
use Migrations\AbstractMigration;
class AddPriceToDomains extends AbstractMigration
{
/**
* Change Method.
*
* More information on this method is available here:
* http://docs.phinx.org/en/latest/migrations.html#the-change-method
* @return void
*/
public function change()
{
$table = $this->table('domains');
$table->addColumn('price', 'decimal', [
'default' => null,
'null' => false,
]);
$table->update();
}
}
-
php bin/cake.php bake migration_snapshot
現在のDBの状況をそのままMigrationファイルにしてくれます。 Cakephp2のころの最初のgenerate -f
と似ています。 しかし、本当にDBのそのままをMigrationファイルにするので、使えて最初だけかなと。 差分を取って、Migrationファイルを作ってくれたりはしません。