Akelosのマイグレーション

2008/10/13

Akelosのマイグレーションについて。
これもRailsと同じような感じ。

Rails型開発だと、まずテーブル設計してモデルつくるところからはじまりますが、それはAkelosでも同様です。
このブログのテーブル定義はこちらの記事を基本とし、記事の下書き状態を表すカラムなどをいくつか追加しました。

ここでマイグレーションに触れることになりますが、AkelosのマイグレーションはやっぱりRailsとほとんど同じです。

Akelosのマイグレーション

コマンドプロンプト(通称DOS窓)で作業します。
カレントをAkelosの配置ディレクトリまで移動。・・・は、ちょっとだるいので、
EclipseからDOS窓を開くことができるプラグイン(Eclipse Platform Extensions)を入れると便利です。

アップデートセンターで、
http://opensource.trajano.net/
を新規リモートサイトとして登録。
「プラットホーム拡張」とかいうプラグインがそれで、
入れるとプロジェクトの右クリックなどで、
「フォルダーを開く」ってのが出てきて、
そのパスでコマンドプロンプトが起動可能になります。

Akelosプロジェクトのトップで、
> php script/generate model Weblog
でWeblogモデルを作成。

強制的に上書きするときは--forceをつける。
> php script/generate model Weblog --force

するとmodelができるとともにapp/installersにweblog_installer.phpというマイグレーションファイルができます。
このweblog_installer.phpにRailsと同じくupメソッドとdownメソッドを書いていきます。
<?php
class WeblogInstaller extends AkInstaller {
  function up_1() {
    $this->createTable('weblogs', "
      id,
      title,
    ");
  }
  function up_2() {
    $this->addColumn('weblogs',"
      description
    ");
  }
  
  function down_1() {
    $this->dropTable('weblogs');
  }
  function down_2() {
    $this->removeColumn('weblogs', "description");
  }
}
?>

Railsの場合はマイグレーションファイルにバージョン番号がつく感じですが、
Alelosの場合はup_バージョン番号 というふうにメソッドにバージョン番号をつけます。

マイグレーションを実行するには、
> php script/migrate Weblog install

ダウングレードするには
> php script/migrate Weblog uninstall 1
で、「バージョン1の状態に戻す」という意味。


カラム属性の指定

カラム名によってデフォルトで付与される属性は、
akelos/lib/AkInstaller.phpのgetDefaultColumnAttributesRulesメソッドに書いてあります。

カラム名が、

  • description/content/body => text

  • lock_version => integer

  • xx_count => integer

  • id => integerでauto_incrementでprimary_key

  • xx_id/xx_by => integerでindex

  • position => integerでindex

  • xx_at => datetime

  • xx_on => date

  • is_xx/has_xx/do_xx/does_xx/are_xx => booleanでindex

  • 上記以外 => string

みたいになっているので、そういうカラム名にすれば属性の指定は不要。

明示的にカラム属性を指定する場合は、
「カラム名 string」のように、カラム名の後にスペースで続けて型を指定します。

ADOdb Data Dictionaryの書式、
ADOdb Data Dictionary Manual
の「Legal portable type codes include:」という箇所を参考にすると、割と自由自在に設定できるようになります。

例えば、MySQLの場合、textはLONGTEXTになってしまいますが、
普通のTEXTを指定したい場合は、「カラム名 X」のように"X"と指定します。

PHP and Akelos | コメント(0) | トラックバック(0)
トラックバック
トラックバックURL:
コメントをどうぞ
名前 (入力しなければ「通りすがり」):

メールアドレス (入力しても公開されません):

URL (入力すればリンクが張られます):


コメント:

(コメントにタグなどを使ってもタグがそのままが表示されます)