まとめてmigrateをおこなう

Akelosでモデルのmigrateをするときにまとめてできないのがめんどくさいので、一括してmigrateを行うインストーラを作って対応。

app/installers/all_installer.php

<?php

class AllInstaller extends AkInstaller
{
  
  function up_1()
  {
    $installers = glob(dirname(__FILE__).DS.'*_installer.php');
    foreach($installers as $installer)
    {
      $installer = str_replace('_installer.php', '', basename($installer));
      if($installer != 'all')
      {
        /*
         * passthru($this->getScriptDir().DS."migrate {$installer} install");
         *  - 修正:20071119
         *  - camelizeしておかないと hoge_fuga とかのときにエラーになるので
         */
        passthru($this->getScriptDir().DS.'migrate '.AkInflector::camelize($installer).' install');
      }
    }
  }
  
  function down_1()
  {
    $installers = glob(dirname(__FILE__).DS.'*_installer.php');
    foreach($installers as $installer)
    {
      $installer = str_replace('_installer.php', '', basename($installer));
      if($installer != 'all')
      {
        /*
         * passthru($this->getScriptDir().DS."migrate {$installer} uninstall");
         *  - 修正:20071119
         *  - camelizeしておかないと hoge_fuga とかのときにエラーになるので
         */
        passthru($this->getScriptDir().DS.'migrate '.AkInflector::camelize($installer).' uninstall');
      }
    }
  }
  
  function getInstallerDir()
  {
    return dirname(__FILE__);
  }
  
  function getScriptDir()
  {
    return dirname(__FILE__).DS.'..'.DS.'..'.DS.'script';
  }
}

?>

あとは

$ ./script/migrate all install

でまとめていけるようになります。