12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

herokuでDBマイグレーションにphpmigを使う

Last updated at Posted at 2014-05-06

phpmigはフレームワークに依存しないシンプルなdatabase migrationツールです。

phpmigでは、どのマイグレーションが実行済みかという情報を保存する方法を切り替えることができます。もっとも単純なのはPhpmig\Adapter\File\Flatで、これはファイルにバージョン情報を保存します。

以下の例では、migrations/.migrations.logというファイルにバージョン情報を保存します。

phpmig.php
$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を使う例です。

phpmig.php
$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

12
13
3

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
12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?