PHP の RailsコピーのAkelosを触ってる。まだVersin0.8だけど、良さそうなので使ってみたい。CakePHPはRailsコピーかと思ったら全然違ったので使うのやめた。
migration
$ php script/generate model Book
上記のコマンドで、Bookモデルが作られる。そうすると、migrateファイルにあたるものが app/installers/book_installesr.php に出来る。デフォルトだと以下のような形になって、バージョンUPとDOWNに対応した処理を書くようになっている。
< ?php
class DrinkInstaller extends AkInstaller
{
function up_1()
{
$this->createTable('drinks', "
id,
name
");
}
function down_1()
{
$this->dropTable('drinks');
}
}
?>
createTableの第一引数がテーブル名、第二引数がテーブルの中身になる。第二引数は、カンマでカラム名を区切っていく。型を指定しないと、自動的に最適な型にしてくれるということだが、怪しいので指定したほうが良さそう。以下のように書く。
$this->createTable('drinks', "
id,
name varchar(255),
descrption text,
isbn varchar(20) not null
");
これをDBに反映させるには script/migrate book install と書く。install をやると up が順に実行され、 uninstall を実行すると down が実行される。
chu@chu-mac:~/Sites/sample$ php script/migrate book install Upgrading----- (mysqlt): SET AUTOCOMMIT=0 ----- ----- (mysqlt): BEGIN ----- ----- (mysqlt): SHOW COLUMNS FROM books ----- 1146: Table 'sample_dev.books' doesn't exist ADOConnection._Execute(SHOW COLUMNS FROM books, false)% line 854, file: /Users/chu/Sites/akelos/vendor/adodb/adodb.inc.php ADOConnection.Execute(SHOW COLUMNS FROM books)% line 393, file: /Users/chu/Sites/akelos/vendor/adodb/drivers/adodb-mysql.inc.php ADODB_mysql.MetaColumns(books, true, false)% line 202, file: /Users/chu/Sites/akelos/vendor/adodb/adodb-datadict.inc.php ADODB_DataDict.MetaColumns(books)% line 723, file: /Users/chu/Sites/akelos/vendor/adodb/adodb-datadict.inc.php ADODB_DataDict.ChangeTableSQL(books, id I NOTNULL AUTO KEY, name varchar(255), desctipntion XL, isbn varchar(20) NOTNULL, updated_at T, created_at T, Array[1])% line 279, file: /Users/chu/Sites/akelos/lib/AkInstaller.php ----- (mysqlt): CREATE TABLE books ( id INTEGER NOT NULL AUTO_INCREMENT, name VARCHAR(255), desctipntion LONGTEXT, isbn VARCHAR(20) NOT NULL, updated_at DATETIME, created_at DATETIME, PRIMARY KEY (id) )TYPE=InnoDB ----- ----- (mysqlt): COMMIT ----- ----- (mysqlt): SET AUTOCOMMIT=1 ----- Smart Commit occurred
途中にエラーっぽいメッセージがあるが、公式のScreenshot見てもこれが正常な動作のようだ。
ちなみに、以下のように書いておくと migration を uninstall した時にbooksテーブルがdropされます。Railsだと、デフォじゃテーブルやバージョン別のmigrationをサポートしてないからこれは結構便利かも。ただ、みんなで別々にやってたらどうなるのか。全部一気にやる方法がまだわからない。同じファイルに全部書いておけば問題はないと思うけど、要調査。
function down_1()
{
$this->dropTable('books');
}