phpmig
簡単に実行できる、ベンダーやフレームワークへの依存の少ないPHPのマイグレーションツール
(READMEから意訳
ここに書いてあるメモは全部READMEに書いてある
後々確実にお世話になるので今のうちに軽く触れてめもめも
参考
インストールから初期化まで
PEARかcomposerを利用してphpmigをインストール
composerでのインストールがベストらしい
composerでインストール
プロジェクト用にローカライズされたphpmigが利用できるようになる(直訳
$ cd /path/to/project
$ echo <<EOT > composer.json
{
"require": {
"php": ">=5.3.1",
"davedevelopment/phpmig": "*"
},
"config": {
"bin-dir": "bin/"
}
}
$ wget http://getcomposer.org/composer.phar
$ php composer.phar install
PEARでインストール
PEAR 1.0用のパッケージはないらしい
$ sudo pear channel-discover pear.atstsolutions.co.uk
$ sudo pear install atst/phpmig-alpha
初期化
PEARでインストールした場合は_bin/phpmig_は_phpmig_に置き換わる
$ cd /path/to/project
$ phpmig init
簡単な動作確認を兼ねてバージョンチェック
$ bin/phpmig --version
簡易チートシート
マイグレーション実行時はup()メソッド、ロールバック時にはdown()メソッドが呼び出される
コマンド実行前後に_$ bin/phpmig status_で確認しながらやると感覚が掴みやすいかもしれない
- マイグレーション用の雛形を生成
./migrationディレクトリに作成される
$ bin/phpmig generate AddRatingToLolCats ./migrations/
- ステータス確認
down: 未実行
up: 実行済み
$ bin/phpmig status
- マイグレーション実行
/migrationディレクトリ内のファイルが順次実行される
$ bin/phpmig migration
- 1つ戻る
$ bin/phpmig rollback
- 全て戻る
$ bin/phpmig rollback -t 0
- 指定のMigration IDの完了時点まで戻る
$ bin/phpmig rollback [MigrationID]
- 指定のMigration IDのみを_up_ or down
$ bin/phpmig [up|down] [MigrationID]
データベースの接続とか
bin/phpmig initで生成される_phpmig.php_の$container['db']にDBアダプターを入れてやるとmigrations/内のクラスでDBが扱えるようになる
他にも、$containerの配列の要素にオブジェクトなりを入れればmigrations/内で使えるようになる
下の例で行くと、migrations/内で$container['db']や$container['app']が使えるようになる
<?php //phpmig.php
$application = new Zend_Application(
APPLICATION_ENV,
$app_ini
);
use \Phpmig\Adapter,
\Phpmig\Pimple\Pimple;
$container = new Pimple();
$container['app'] = $application;
$container['db'] = Zend_Db::factory($adapterName, $params);
$container['phpmig.adapter'] = $container->share(function () {
// replace this with a better Phpmig\Adapter\AdapterInterface
return new Adapter\File\Flat(__DIR__ . DIRECTORY_SEPARATOR . 'migrations/.migrations.log');
});
$container['phpmig.migrations'] = function() {
return glob(__DIR__ . DIRECTORY_SEPARATOR . 'migrations/*.php');
};
return $container;
migrations/内のクラスからphpmig.phpの$containerを呼び出すには、$this->getContainer()を利用する
<?php // ./migrations/20130217150827_AddSomeTableMigration.php
use Phpmig\Migration\Migration;
class AddSomeTableMigration extends Migration
{
/**
* Do the migration
*/
public function up()
{
$container = $this->getContainer();
$container['db']->query('CREATE TABLE IF NOT EXISTS some_table ( id int )');
}
/**
* Undo the migration
*/
public function down()
{
$container = $this->getContainer();
$container['db']->query('DROP TABLE IF EXISTS phpmig_test');
}
}