phpmigはフレームワークに依存しないシンプルなdatabase migrationツールです。
phpmigでは、どのマイグレーションが実行済みかという情報を保存する方法を切り替えることができます。もっとも単純なのはPhpmig\Adapter\File\Flat
で、これはファイルにバージョン情報を保存します。
以下の例では、migrations/.migrations.log
というファイルにバージョン情報を保存します。
$container['phpmig.adapter'] = new Phpmig\Adapter\File\Flat(__DIR__ . DIRECTORY_SEPARATOR . 'migrations/.migrations.log');
しかし、herokuなどのPaaSでは、デプロイ時に実行環境がまっさらな状態から作り直されるので、migrations/.migrations.log
ファイルが消えてしまい、DBの状態と食い違ってしまいます。なのでPhpmig\Adapter\File\Flat
は使えません。
代わりにDBにバージョン情報を保存しましょう。現状、DBにバージョン情報を保存するためのアダプタとして以下のものが用意されています。
- Phpmig\Adapter\Doctrine\DBAL
- Phpmig\Adapter\Illuminate\Database
- Phpmig\Adapter\PDO\Sql
- Phpmig\Adapter\Zend\Db
以下はPhpmig\Adapter\PDO\Sql
を使う例です。
$container['phpmig.adapter'] = $container->share(function () use ($container) {
return new Phpmig\Adapter\PDO\Sql($container['db'], 'migrations');
});
但し今のphpmigの最新リリース1.0.0では、Phpmig\Adapter\PDO\Sql
はPostgreSQLだと動きません。
$ vendor/bin/phpmig migrate
[PDOException]
SQLSTATE[42704]: Undefined object: 7 ERROR: 設定パラメータ"tables"?
??不明です
migrate [-b|--bootstrap="..."] [-t|--target="..."]
すでになおっているようなので、新しいリリースを待つか、あるいはphpmigをcomposerで入れるときにdev-masterを入れるようにしましょう。
Add support for PostgreSQL in Adapter\PDO\Sql by umireon · Pull Request #57 · davedevelopment/phpmig