pak_koi9v9a6859_tp_v

Migrationとは

MigrationとはDBの設計書です。
直接CreateのSQL文を流してDBやテーブルを作成してもシステム上は何も問題ありませんが開発中にDB定義が変更になる場合が多々あります。
Migrationで管理していれば変更の履歴を確認する事ができますし、開発環境をローカルに作成する際にコマンド一つで最新DBが作成可能となります。


直接Create文をSQLで流すやり方はキャンパスに直接絵を書くようなものです。
Migrationは直接絵を書かず、設計書(Migrationファイル)を作ります。

複製、管理する際には設計書から絵をプリントするMigrationを使った方が圧倒的に便利です。

使用頻度の高いコマンド(Migrationファイル作成時)

テーブル作成

table create時のコマンド
下記コマンドではname,order_date,created,modifiedというカラムを持つOrdersテーブルを作成します。

$ bin/cake bake migration CreateOrders id name:string order_date:datetime created modified

カラム追加時

下記コマンドでOrderテーブルにPriceカラムをdecimalで作成します。

$ bin/cake bake migration AddPriceToOrders price:decimal

カラム削除

下記コマンドでOrderテーブルにPriceカラムを削除します。

$ bin/cake bake migration RemovePriceFromOrders price

removeColumnは不可逆なので「public function change()」となっている所を手書きで「public function up()」と修正してdown functionも手書きで作成する必要があります。

修正後ファイル例

use Migrations\AbstractMigration;

class RemovePriceFromOrders 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 up()
    {
        $table = $this->table('orders');
        $table->removeColumn('price');
        $table->update();
    }

    public function down()
    {
        $table = $this->table('orders');
        $table->addColumn('price', 'decimal', [
            'default' => null,
            'null' => false,
        ]);
        $table->update();
    }
}

現在接続しているDBからMigrationファイルを作成する

既存DBすべてのテーブルのMigrationファイルを作成します。

$ bin/cake bake migration_snapshot Initial

既存DBの中でModelファイルが存在するテーブルだけをMigrationファイルとして作成します。

$ bin/cake bake migration_snapshot Initial --require-table

使用頻度の高いコマンド(Migration実行時)

実行

全てのMigrationファイルを実行

bin/cake migrations migrate

特定のMigrationファイルを実行

bin/cake migrations migrate -t 20150103081132

ロールバック

特定の状態まで戻す

bin/cake migrations rollback -t 20150103081132

ステータス確認

Migrationの実行状況を確認出来ます。

$ bin/cake migrations status

マーキング

全てのMigrationを実行済みにする。

$ bin/cake migrations mark_migrated

特定のMigrationファイルを実行済みにする。

$ bin/cake migrations mark_migrated --target=20151016204000

Phinx で一般的に利用可能なフィールドの型

string
text
integer
biginteger
float
decimal
datetime
timestamp
time
date
binary
boolean
uuid

Share on Facebook0Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on Yummly0